c# 根据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控制台应用程序项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
- 点击下一步。
- 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
- 单击创建。
这将在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位整数使您的GUID唯一地编程,该整数可以使用两个ULong值表示并按顺序递增。
您可能希望经常在应用程序中将GUID转换为字符串。 您可能需要执行此操作,以将GUID数据绑定到数据控件或将GUID传递到用户界面。 您甚至可能希望将GUID对象转换为字符串,以根据需要格式化GUID数据。
您可以通过几种不同的方式创建GUID。 这些包括随机的,基于时间的,基于硬件的和基于内容的(即,基于一条数据的MD5或SHA-1哈希值)。 在以后的文章中,我将向您介绍所有这些方式以及GUID的其他高级功能。
如何在C#中做更多
- 何时在C#中使用抽象类与接口
- 如何在C#中使用AutoMapper
- 如何在C#中使用Lambda表达式
- 如何在C#中与Action,Func和Predicate委托一起使用
- 如何在C#中与委托人一起工作
- 如何在C#中实现一个简单的记录器
- 如何在C#中使用属性
- 如何在C#中使用log4net
- 如何在C#中实现存储库设计模式
- 如何在C#中使用反射
- 如何在C#中使用FileSystemWatcher
- 如何在C#中执行延迟初始化
- 如何在C#中使用MSMQ
- 如何在C#中使用扩展方法
- 如何在C#中使用Lambda表达式
- 何时在C#中使用volatile关键字
- 如何在C#中使用yield关键字
- 如何在C#中实现多态
- 如何在C#中构建自己的任务计划程序
- 如何在C#中使用RabbitMQ
- 如何在C#中使用元组
- 探索C#中的虚拟和抽象方法
翻译自: https://www.infoworld.com/article/3539951/how-to-work-with-guids-in-csharp-8.html
c# 根据guid使用类