日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

guid oracle 生成不重复_可空类型和Guid的使用

發(fā)布時(shí)間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 guid oracle 生成不重复_可空类型和Guid的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0. 前言

在《C# 基礎(chǔ)知識(shí)系列- 13 常見(jiàn)類(lèi)庫(kù)(二)》中,我們介紹了一下DateTime和TimeSpan這兩個(gè)結(jié)構(gòu)體的內(nèi)容,也就是C#中日期時(shí)間的簡(jiǎn)單操作。本篇將介紹Guid和Nullable這兩個(gè)內(nèi)容。

1. Guid 結(jié)構(gòu)

Guid(Globally Unique Identifier) 全局唯一標(biāo)識(shí),是一種由算法生成的二進(jìn)制長(zhǎng)度為128位的字符串,但字符串的長(zhǎng)度是36其中32位16進(jìn)制的數(shù)字和四個(gè)連接符。其作用是用來(lái)表示全局唯一標(biāo)識(shí),當(dāng)多個(gè)系統(tǒng)或者數(shù)據(jù)量大的時(shí)候,用來(lái)做唯一標(biāo)識(shí),比如說(shuō)數(shù)據(jù)庫(kù)的主鍵。Guid并不是C#獨(dú)有的,所以可以放心使用,不用擔(dān)心跟其他系統(tǒng)交互時(shí)遇到對(duì)方無(wú)法識(shí)別的尷尬局面。

Guid應(yīng)用非常廣泛,如果有查看過(guò)Windows系統(tǒng)注冊(cè)表的同學(xué)應(yīng)該見(jiàn)過(guò)如下類(lèi)型的數(shù)據(jù):efa4bcc8-b293-48d5-9278-924b9c015b97 ,這就是Guid。Guid甚至被Windows用作組件注冊(cè),網(wǎng)絡(luò)接口標(biāo)識(shí)等。

簡(jiǎn)單來(lái)講,Guid適合需要不重復(fù)標(biāo)識(shí)的場(chǎng)景。

1.1 創(chuàng)建一個(gè)Guid

Guid的創(chuàng)建非常簡(jiǎn)單直接通過(guò)Guid.NewGuid(),示例:

class Program{ static void Main(string[] args) { Guid guid = Guid.NewGuid(); Console.WriteLine(guid); }}

多次運(yùn)行以上代碼將會(huì)出現(xiàn)不同的結(jié)果,這是我的一次運(yùn)行結(jié)果:

66168bfa-8c3b-45ce-a340-da99c668fca8

到這里,創(chuàng)建Guid就可以認(rèn)為達(dá)到目的了,但是我們一起來(lái)看下Guid有哪些構(gòu)造函數(shù)吧:

public Guid (byte[] b);

用長(zhǎng)度為16的字節(jié)數(shù)組初始化一個(gè)Guid,其中Guid的值與字節(jié)數(shù)組相關(guān)。(根據(jù)定義來(lái)理解,C#會(huì)將字節(jié)數(shù)組b轉(zhuǎn)換為128位的二進(jìn)制數(shù)據(jù),再轉(zhuǎn)換為字符串格式)。

示例:

class Program{ static void Main(string[] args) { var bytes = new byte[16] { 12,23,59,29,93,22,22,19,45,37,53,38,54,46,33,11 }; Guid guid = new Guid(bytes); Console.WriteLine(guid); }}

多次運(yùn)行,打印結(jié)果都是以下內(nèi)容:

1d3b170c-165d-1316-2d25-3526362e210b

以上可以得知,是通過(guò)一個(gè)字節(jié)數(shù)組創(chuàng)建一個(gè)Guid元素,這個(gè)元素的值就是這個(gè)字節(jié)數(shù)組的值。

繼續(xù)介紹第二個(gè)構(gòu)造方法,通過(guò)格式化的字符串創(chuàng)建:

public Guid (string g);

g表示Guid數(shù)據(jù),有以下幾種格式:

  • dddddddddddddddddddddddddddddddd 表示32個(gè)連續(xù)數(shù)字
  • dddddddd-dddd-dddd-dddd-dddddddddddd 表示 8、4、4、4 和 12 位數(shù)字的分組,可以用小括號(hào)和大括號(hào)包裹起來(lái)
  • {0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}8、4 和 4 位數(shù)字的分組,和一個(gè) 8 組 2 位數(shù)字的子集,每組都帶有前綴“0x”或“0X”,以逗號(hào)分隔
  • 該方法接受以上格式的Guid字符串,以下是示例:

    string[] guidStrings = { "ca761232ed4211cebacd00aa0057b223", "CA761232-ED42-11CE-BACD-00AA0057B223", "{CA761232-ED42-11CE-BACD-00AA0057B223}", "(CA761232-ED42-11CE-BACD-00AA0057B223)", "{0xCA761232, 0xED42, 0x11CE, {0xBA, 0xCD, 0x00, 0xAA, 0x00, 0x57, 0xB2, 0x23}}" };foreach (var guidString in guidStrings){ var guid = new Guid(guidString); Console.WriteLine($"Original string: {guidString}"); Console.WriteLine($"Guid: {guid}"); Console.WriteLine();}

    打印結(jié)果如下:

    通過(guò)指定的整數(shù)和字節(jié)數(shù)組初始化:

    public Guid (int a, short b, short c, byte[] d);

    其中a 表示前四個(gè)字節(jié),也就是第一個(gè)分隔符前面的八位,b表示之后兩個(gè)字節(jié),c表示b之后的兩個(gè)字節(jié),d表示其余八個(gè)字節(jié)。

    Guid(1,2,3,new byte[]{0,1,2,3,4,5,6,7}) 創(chuàng)建對(duì)應(yīng)于 "00000001-0002-0003-0001-020304050607" 的 Guid。

    依次指定各個(gè)位置的值:

    public Guid (int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k);

    這個(gè)方法與上一個(gè)類(lèi)似,不過(guò)分的更細(xì)致了,其中int四個(gè)字節(jié),byte一個(gè)字節(jié),與類(lèi)型的實(shí)際字節(jié)長(zhǎng)度一致。

    1.2 一個(gè)空的Guid

    C# 為Guid結(jié)構(gòu)體提供了一個(gè)靜態(tài)只讀屬性:Empty,其值均為零,表示Guid的零值。很多接口或系統(tǒng)會(huì)為Guid類(lèi)型的字段提供一個(gè)默認(rèn)零值就是這個(gè)值,在一些業(yè)務(wù)場(chǎng)景中會(huì)遇到與零值的相等判斷。

    1.3 Guid與字符串之間一個(gè)轉(zhuǎn)身

    根據(jù)Guid構(gòu)造函數(shù)可以看到Guid的打印格式應(yīng)該有三種,那么如何生成這三種呢?C#還有沒(méi)有更多的格式支持呢?

    Guid的ToString方法有以下三個(gè)版本:

    public override string ToString ();public string ToString (string format);public string ToString (string format, IFormatProvider provider);

    第一個(gè)是默認(rèn)的轉(zhuǎn)字符串的方法,格式在上文也有介紹。最后一個(gè)涉及到國(guó)際化,略過(guò)不提。第二個(gè),則是用格式確定輸出結(jié)果。C# 支持的format值和對(duì)應(yīng)的意義如下:

    說(shuō)明符 返回值的格式 N 32位數(shù): 00000000000000000000000000000000 D 32的數(shù)字,由連字符分隔: 00000000-0000-0000-0000-000000000000 B 32位,用連字符隔開(kāi),括在大括號(hào)中: {00000000-0000-0000-0000-000000000000} P 32位,用連字符隔開(kāi),括在括號(hào)中: (00000000-0000-0000-0000-000000000000) X 括在大括號(hào)中的四個(gè)十六進(jìn)制值,其中第四個(gè)值是八個(gè)十六進(jìn)制值的子集(也括在大括號(hào)中): {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

    如果fomat為NULL或者空字符串,則默認(rèn)為D。

    這里介紹了Guid生成字符串的方法和對(duì)應(yīng)的格式內(nèi)容,而字符串轉(zhuǎn)Guid除了使用構(gòu)造函數(shù)以外還有兩種方式:

    public static Guid Parse (string input);public static Guid ParseExact (string input, string format);

    第一個(gè)方法由C#自動(dòng)解析字符串格式,第二種由調(diào)用方明確指出字符串的格式。格式僅支持N/D/B/P/X這五種。

    2. 基礎(chǔ)類(lèi)型的可空化

    我們常用的基本數(shù)據(jù)類(lèi)型,包括這兩篇介紹的類(lèi)型除了string是類(lèi),其他都是struct類(lèi)型。在C#中struct無(wú)法置為NULL,一般情況下并不影響程序的運(yùn)行。但是,如果涉及到交互,無(wú)論是與人還是與其他的系統(tǒng)交互,都會(huì)出現(xiàn)數(shù)據(jù)不可用的情況。舉例來(lái)說(shuō),一場(chǎng)數(shù)學(xué)考試,對(duì)于每個(gè)學(xué)生來(lái)說(shuō)都會(huì)有一個(gè)數(shù)字類(lèi)型的試卷成績(jī)。如果有同學(xué)因?yàn)樯×巳笨剂?#xff0c;我們直接給他試卷上標(biāo)記零分顯然是不可取的,所以需要標(biāo)記為NULL,意思是缺考。這時(shí)候如果在系統(tǒng)中簡(jiǎn)單的使用 int或者double存成績(jī)就會(huì)出現(xiàn)NULL無(wú)法存入系統(tǒng)。

    C#為了解決此類(lèi)問(wèn)題,添加了Nullable,這是個(gè)結(jié)構(gòu)體,C#為此添加了額外的支持。我們看下如何聲明一個(gè)可空的int類(lèi)型:

    Nullable score;

    C# 除了以上的聲明方式,還提供了一種特殊的語(yǔ)法,使用?:

    int? score;

    也就是類(lèi)型? 表示 的可空類(lèi)型。

    2.1 可空類(lèi)型的使用

    可空類(lèi)型可以跟其原類(lèi)型一樣正常使用,包括原類(lèi)型支持的算術(shù)運(yùn)算等。不過(guò)值得注意的一點(diǎn)是,如果可控類(lèi)型的值為null,在和其他非null值進(jìn)行計(jì)算后,最終結(jié)果只能是null。

    C# 為可空類(lèi)型的值判斷和讀取提供了兩個(gè)屬性:

    public bool HasValue { get; }public T Value { get; }

    如果HasValue為T(mén)rue,則表示Value可以正確讀取到值,否則這個(gè)可控類(lèi)型就是null。

    以上是Nullable的使用介紹,使用起來(lái)很簡(jiǎn)單,但是這是C#中一個(gè)很重要的地方。

    3. 總結(jié)

    這是《C# 基礎(chǔ)知識(shí)系列-常見(jiàn)類(lèi)庫(kù)》的最后一篇,但并不意味著C#的常見(jiàn)類(lèi)只有這么多,后面還有很多內(nèi)容。放心吧,都會(huì)在以后的篇幅中為大家一一介紹的。

    更多內(nèi)容煩請(qǐng)關(guān)注我的博客《高先生小屋》

    總結(jié)

    以上是生活随笔為你收集整理的guid oracle 生成不重复_可空类型和Guid的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。