最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中Guid類使用小結(jié)

 更新時(shí)間:2025年07月04日 10:42:21   作者:鯉籽鯤  
本文主要介紹了C#中Guid類用于生成和操作 128 位的唯一標(biāo)識(shí)符,用于數(shù)據(jù)庫(kù)主鍵及分布式系統(tǒng),支持通過(guò)NewGuid、Parse等方法生成,感興趣的可以了解一下

前言

C# 中的 Guid 類(全局唯一標(biāo)識(shí)符,Globally Unique Identifier)用于生成和操作 128 位的唯一標(biāo)識(shí)符。它在需要唯一標(biāo)識(shí)的場(chǎng)景(如數(shù)據(jù)庫(kù)主鍵、分布式系統(tǒng)等)中廣泛使用。

一、什么是 Guid

Guid(Globally Unique Identifier,全局唯一標(biāo)識(shí)符)是一種由 128 位(16 字節(jié))組成的唯一標(biāo)識(shí)符。

  • 它通常以 32 個(gè)十六進(jìn)制數(shù)字表示,分為 5 組,格式為 8-4-4-4-12xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • 示例:123e4567-e89b-12d3-a456-426614174000。

Guid 的主要用途是為對(duì)象、數(shù)據(jù)庫(kù)記錄等提供一個(gè)在全局范圍內(nèi)唯一的標(biāo)識(shí),避免因重復(fù)而導(dǎo)致的沖突問(wèn)題。

二、生成 Guid

在 C# 中,可以使用 System.Guid 類來(lái)生成 Guid。

1. 使用 Guid.NewGuid() 方法

這是最常用的方式,用于生成一個(gè)新的隨機(jī) Guid。

Guid newGuid = Guid.NewGuid();
Console.WriteLine(newGuid.ToString());

每次調(diào)用 Guid.NewGuid() 方法都會(huì)生成一個(gè)不同的 Guid,它通過(guò)復(fù)雜的算法確保生成的 Guid 在全球范圍內(nèi)具有極高的唯一性。

2. 從字符串創(chuàng)建 Guid

如果已經(jīng)有一個(gè)符合 Guid 格式的字符串,可以通過(guò) Guid.Parse 或 Guid.TryParse 方法將其轉(zhuǎn)換為 Guid 對(duì)象。

string guidString = "123e4567-e89b-12d3-a456-426614174000";
Guid guid = Guid.Parse(guidString);
Console.WriteLine(guid.ToString());

Guid.Parse 方法在字符串格式不正確時(shí)會(huì)拋出異常,而 Guid.TryParse 方法則會(huì)返回一個(gè)布爾值,表示轉(zhuǎn)換是否成功,避免異常的發(fā)生。

string guidString = "123e4567-e89b-12d3-a456-426614174000";
Guid guid;
if (Guid.TryParse(guidString, out guid))
{
	  Console.WriteLine(guid.ToString());
}
else
{
	  Console.WriteLine("Invalid GUID format.");
}

3. 從構(gòu)造函數(shù)

  • 全零 Guid:Guid.Empty 表示全零的 Guid(00000000-0000-0000-0000-000000000000)。
  • 從字節(jié)數(shù)組創(chuàng)建 Guid
    • 如果有一個(gè)長(zhǎng)度為 16 的字節(jié)數(shù)組,也可以通過(guò) new Guid(byte[]) 構(gòu)造函數(shù)來(lái)創(chuàng)建 Guid。
        byte[] bytes = new byte[16];
        
        // 使用隨機(jī)數(shù)填充字節(jié)數(shù)組
        Random random = new Random();
        random.NextBytes(bytes);
        
        Guid guid = new Guid(bytes);
        Console.WriteLine(guid.ToString());

實(shí)例化

  • 使用指定字符串表示的值創(chuàng)建Guid結(jié)構(gòu)。
	 Guid guid = new Guid("123e4567-e89b-12d3-a456-426614174000");
	 Console.WriteLine(guid.ToString());

三、Guid 的屬性和方法

1. 全零 Guid

Guid.Empty : 表示全零的 Guid(00000000-0000-0000-0000-000000000000)。

2. Guid.ToString() 格式化

Guid 提供了多種格式化選項(xiàng),可以通過(guò) ToString 方法并指定格式化字符串來(lái)控制輸出格式。

  • “N”:不帶連字符的32個(gè)數(shù)字組成的字符串。
  • “D”:由連字符分隔的32個(gè)數(shù)字(默認(rèn)格式)。
  • “B”:被大括號(hào)包圍的GUID。
  • “P”:被圓括號(hào)包圍的GUID。
  • “X”:每個(gè)字節(jié)由“0x”開頭的十六進(jìn)制字符串組成,整個(gè)GUID被大括號(hào)包圍,并且每?jī)蓚€(gè)字節(jié)之間有逗號(hào)分隔。
	Guid guid = Guid.NewGuid();
	Console.WriteLine(guid.ToString("N")); // 輸出類似:3dfdb9e3b8a7445c8634268e71345b9e
	Console.WriteLine(guid.ToString("D")); // 輸出類似:3dfdb9e3-b8a7-445c-8634-268e71345b9e
	Console.WriteLine(guid.ToString("B")); // 輸出類似:{3dfdb9e3-b8a7-445c-8634-268e71345b9e}
	Console.WriteLine(guid.ToString("P")); // 輸出類似:(3dfdb9e3-b8a7-445c-8634-268e71345b9e)
	Console.WriteLine(guid.ToString("X")); // 輸出類似:{0x3dfdb9e3,0xb8a7,0x445c,{0x86,0x34,0x26,0x8e,0x71,0x34,0x5b,0x9e}}

3. Guid 的比較

Guid 類提供了多種比較方法,用于比較兩個(gè) Guid 是否相等。

  • 使用 Equals 方法
	Guid guid1 = Guid.NewGuid();
	Guid guid2 = guid1;
	bool isEqual = guid1.Equals(guid2);
	Console.WriteLine(isEqual); // 輸出:True
  • 使用 == 和 != 運(yùn)算符
	bool isEqual = guid1 == guid2;
	bool isNotEqual = guid1 != guid2;
	Console.WriteLine(isEqual); // 輸出:True
	Console.WriteLine(isNotEqual); // 輸出:False
  • 使用 CompareTo 方法
    CompareTo 方法用于比較兩個(gè) Guid 的字典順序。
	int comparisonResult = guid1.CompareTo(guid2);
	if (comparisonResult == 0)
	{
	    Console.WriteLine("Guids are equal.");
	}
	else if (comparisonResult < 0)
	{
	    Console.WriteLine("Guid1 is less than Guid2.");
	}
	else
	{
	    Console.WriteLine("Guid1 is greater than Guid2.");
	}

四、Guid 的存儲(chǔ)和傳輸

由于 Guid 是 128 位的結(jié)構(gòu),因此在存儲(chǔ)和傳輸時(shí)需要考慮其大小和性能。

1. 數(shù)據(jù)庫(kù)存儲(chǔ)

在數(shù)據(jù)庫(kù)中,Guid 通常以 uniqueidentifier 類型存儲(chǔ)(在 SQL Server 中)。在實(shí)體框架(Entity Framework)中,可以將實(shí)體的主鍵設(shè)置為 Guid 類型。

public class MyEntity
{
    public Guid Id { get; set; }
    // 其他屬性
}

2. 網(wǎng)絡(luò)傳輸

在通過(guò)網(wǎng)絡(luò)傳輸 Guid 時(shí),通常將其轉(zhuǎn)換為字符串格式,以方便傳輸和解析。

string guidString = guid.ToString();
// 傳輸 guidString

在接收端,可以使用 Guid.Parse 或 Guid.TryParse 方法將其轉(zhuǎn)換回 Guid 對(duì)象。

五、使用場(chǎng)景與注意事項(xiàng)

1. 使用場(chǎng)景

  • 數(shù)據(jù)庫(kù)主鍵
    • GUID常被用作數(shù)據(jù)庫(kù)表的主鍵,尤其是在分布式系統(tǒng)中。由于其獨(dú)特性,它可以確??缍鄠€(gè)數(shù)據(jù)庫(kù)或服務(wù)的數(shù)據(jù)同步問(wèn)題最小化。替代自增整數(shù),避免主鍵暴露業(yè)務(wù)信息。
  • 唯一標(biāo)識(shí)
    • GUID非常適合用于需要保證唯一性的場(chǎng)合,例如用戶會(huì)話ID、訂單編號(hào)等。
  • 文件名
    • 在某些情況下,GUID可以用作文件名的一部分,以確保文件名稱在全球范圍內(nèi)唯一。

2. 注意事項(xiàng)

  • 性能問(wèn)題:雖然 Guid 的唯一性很高,但生成 Guid 和比較 Guid 的性能相對(duì)較低。在需要大量生成和比較 Guid 的場(chǎng)景中,需要考慮性能優(yōu)化。
  • 隨機(jī)性與唯一性
    • Guid.NewGuid() 生成的是隨機(jī)的 Guid,其唯一性基于隨機(jī)算法。雖然沖突的概率極低,但在極端情況下仍然可能存在沖突。如果需要更高的唯一性,可以考慮使用其他生成策略,例如基于時(shí)間戳和機(jī)器標(biāo)識(shí)的 Guid 生成算法。
    • 理論上存在重復(fù)概率,但極低(每秒生成 10 億個(gè) Guid,約需 100 年才會(huì)重復(fù))。
  • 存儲(chǔ)空間:Guid 占用 16 字節(jié)的空間,相比整數(shù)類型的主鍵(如 int 或 long),存儲(chǔ)空間更大。在存儲(chǔ)大量數(shù)據(jù)時(shí),需要考慮存儲(chǔ)空間的開銷。
  • 無(wú)序性:Guid 無(wú)序,作為主鍵可能導(dǎo)致索引碎片(可考慮順序 Guid,如 CombGuid,結(jié)合時(shí)間戳和隨機(jī)數(shù),優(yōu)化數(shù)據(jù)庫(kù)索引性能。)
  • 安全性:隨機(jī) Guid 不保證加密安全,需使用 RNGCryptoServiceProvider 生成安全隨機(jī)數(shù)。

七、總結(jié)

Guid 是一種非常有用的唯一標(biāo)識(shí)符,在 C# 中可以通過(guò)多種方式生成、格式化和比較。它在數(shù)據(jù)庫(kù)主鍵、對(duì)象標(biāo)識(shí)、分布式系統(tǒng)中具有廣泛的應(yīng)用。然而,在使用 Guid 時(shí)也需要考慮其性能和存儲(chǔ)空間的開銷,合理選擇使用場(chǎng)景。

到此這篇關(guān)于C#中Guid類使用小結(jié)的文章就介紹到這了,更多相關(guān)C# Guid使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

马山县| 平山县| 新竹市| 侯马市| 威远县| 揭东县| 东乌| 临高县| 颍上县| 焦作市| 紫金县| 花莲县| 阿拉善盟| 富锦市| 克什克腾旗| 岐山县| 科技| 恩施市| 淄博市| 衡东县| 都匀市| 蓬溪县| 米易县| 阳谷县| 蕉岭县| 富源县| 宝丰县| 平顺县| 德令哈市| 田阳县| 工布江达县| 乌审旗| 江西省| 精河县| 府谷县| 丘北县| 邓州市| 叶城县| 南木林县| 阿拉善左旗| 衡东县|