在.net2.0中,Guid結構體表示一個全局唯一標識符,是一個在生成時就可以肯定為全世界唯一的16字節值。Guid在數據庫中通常可以作為各種排序的主鍵。其實一般情況下直接int也可以,但使用Guid可以在將來更換或遷移數據庫時不需要進行一些其它操作以確保ID的唯一性。比如
1 public class Company 2 { 3 public Guid id { get; set; } 4 ...... 5 }
其中Guid可以表示值范圍總共有2128或者3.4x1018個值。
可以調用靜態的Guid.newGuid方法創件一個新的唯一的Guid;
在vs code里直接dotnet new console -n test創建控制台項目,寫入測試代碼:
1 using System; 2 using static System.Guid; 3 using static System.Console; 4 namespace test 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 Guid newGuid1 = Guid.NewGuid(); 11 WriteLine(newGuid1.ToString()); 12 } 13 } 14 }
然后在powershell里cd test,進行dotnet build及dotnet run;
PS C:\Users\huang\source\repos\數據結構\Guid> dotnet build 用於 .NET Core 的 Microsoft (R) 生成引擎版本 16.4.0+e901037fe 版權所有(C) Microsoft Corporation。保留所有權利。 C:\Users\huang\source\repos\數據結構\Guid\Guid.csproj 的還原在 35.37 ms 內完成。 Guid -> C:\Users\huang\source\repos\數據結構\Guid\bin\Debug\netcoreapp3.1\Guid.dll 已成功生成。 0 個警告 0 個錯誤 已用時間 00:00:01.10 PS C:\Users\huang\source\repos\數據結構\Guid> dotnet run 664a92a8-70cd-46ec-b8e5-f7aba10d6127 PS C:\Users\huang\source\repos\數據結構\Guid>
可看到生成了一個16字節值。
當然,也可以直接使用構造器實例化一個現有的Guid,比如
class Guid1{ int _x; public Guid(int x) { _x = x; } } }
當以字符串形式出現時,Guid是一個由32個16進制數字表示。
Guid newGuid2 = Guid.NewGuid("664a92a8-70cd-46ec-b8e5-f7aba10d6127");
Guid是一個結構體,支持值類型的語義,Guid有一個ToByteArray方法可以將其轉換為一個字節數組,其中Guid.Empty靜態屬性可以返回一個空的Guid,通常用來表示null。