如何在C#8中使用GUID

在应用程序中工作时,您可能经常需要使用全局唯一标识符(GUID)。 SQL数据库中的主键之类的唯一标识符可确保不会重复或覆盖客户和发票等重要对象。 没有唯一的标识符,我们将无法防止数据丢失或确保应用程序的数据完整性。

全局唯一标识符(GUID)代表一个巨大的标识号,它很大,以数学方式保证不仅在数据库之类的单个系统中而且在多个系统或分布式应用程序中都是唯一的。 本文讨论了为什么需要GUID,以及如何在C#8.0中使用GUID。

[ 也在InfoWorld上:什么是Jenkins? CI服务器说明 ]

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019

在Visual Studio中创建控制台应用程序项目

首先,让我们在Visual Studio中创建一个.NET Core Console Application项目。 假设系统中已安装Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的.NET Core控制台应用程序项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。

这将在Visual Studio 2019中创建一个新的.NET Core控制台应用程序项目。在本文的后续部分中,我们将使用该项目来处理GUID。 请注意,我们将在此处使用C#8,因此您可能要更新项目中的语言版本

为什么我们需要GUID?

假设您有一个销售点应用程序,该应用程序可以在移动应用程序上以在线和离线模式使用。 假设您的应用程序提供了从1开始自动生成的ID号。恢复连接性后,如何合并脱机数据? 如果两种方式都生成了您的ID号怎么办? 可能会发生碰撞,对吧? 您将如何处理重复的ID号? 您绝对可以解决这个问题,但是您必须编写很多代码-这不是您想要的。

这是GUID抢救的地方。 GUID是一个巨大的数字-长128位-几乎是唯一的。 为什么几乎独一无二? 为什么不能说它是独特的? 基本上,可能的GUID数量如此之大,以至于碰撞的可能性极小。 然而,碰撞的机会并不为零。

您可以通过使GUID成为数据库表的主键来利用它们。 合并两个或多个数据库时,使用GUID甚至可以帮助您避免合并冲突。 GUID的另一个优点是,您可以脱机生成它们-无需连接到网络或Internet。

GUID如何表示?

以下是GUID的示例。 请注意,GUID通常为128位长,以十六进制表示。

eaa24756-3fac-4e46-b4bb-074ff4f5b846

GUID组织为定义明确的32位十六进制数字序列,这些序列被分组为8-4-4-4-12的块。 因此,您最多可以有2 ^ 128个GUID。

在C#8中创建GUID

在本节中,我们将学习如何在C#中使用GUID。 您可以使用作为系统名称空间一部分的Guid结构在.NET中创建GUID。 这是在C#中生成GUID的最简单方法。 在您先前创建的项目中的Program.cs文件的Main()方法中编写以下代码。

Guid obj = Guid.NewGuid();
Console.WriteLine("The newly created Guid is: " + obj.ToString());
Console.ReadKey();

在C#8中创建一个空的GUID

由于Guid是一个结构,因此它是一个值类型,因此您不能将其设置为null。 要创建空的Guid,您可以编写以下代码。

Guid id = new Guid();
if(id == Guid.Empty)
Console.WriteLine("The Guid is empty");

Guid.Empty的值为00000000-0000-0000-0000-000000000000。 您可以利用空的GUID将其与另一个GUID对象进行比较,以确定它是否为非零。 下面的代码段对此进行了说明。

if (guid != Guid.Empty){  
  //The GUID object contains non-zero values
}
else
{
  //The GUID object is empty

这是确定GUID是否为Guid.Empty的简单扩展方法。

public static bool IsNullOrEmpty(this Guid guid)
{
  return (guid == Guid.Empty);

您甚至可以使用以下扩展方法检查可为空的GUID是否为空。

public static bool IsNullOrEmpty(this Guid? guid)
{
  if (guid.HasValue)
    if (guid == default(Guid))
        return true;
    return false;
}

请注意,default(Guid)与Guid.Empty相同。

在C#8中将GUID转换为字符串

您甚至可以将GUID转换为字符串。 以下代码段显示了如何将空的GUID转换为字符串。

string str = Guid.Empty.ToString();
Console.WriteLine(str);

请注意,使用GUID有一个主要警告:您可能会发生冲突。 还要注意,GUID占用一些空间,并且它们不是按顺序生成的。 但是,您可以通过使用一个128位整数(可以使用两个ULong值表示)并将其顺序递增来以编程方式使GUID唯一。

您可能希望经常在应用程序中将GUID转换为字符串。 您可能需要执行此操作,以将GUID数据绑定到数据控件或将GUID传递到用户界面。 您甚至可能希望将GUID对象转换为字符串,以根据需要格式化GUID数据。

您可以通过几种不同的方式创建GUID。 这些包括随机的,基于时间的,基于硬件的和基于内容的(即,基于一条数据的MD5或SHA-1哈希值)。 在以后的文章中,我将向您介绍所有这些方式以及GUID的其他高级功能。

如何在C#中做更多

From: https://www.infoworld.com/article/3539951/how-to-work-with-guids-in-csharp-8.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值