等效的new Guid()和guide . empty的目的
本文关键字:guide empty new Guid | 更新日期: 2023-09-27 18:07:20
new Guid()
和Guid.Empty
产生相同的结果(all-0 guid (0000000 -0000000 -0000000 -0000000 -000000000000)
var guid = new Guid();
Console.WriteLine(guid);//00000000-0000-0000-0000-000000000000
var emptyGuid = Guid.Empty;
Console.WriteLine(emptyGuid);//00000000-0000-0000-0000-000000000000
这是做同一件事的两种不同的方式吗?可读性原因?还是我错过了什么?
Guid
为struct
。所有结构体都有一个隐式默认构造函数,该构造函数将所有成员初始化为其默认值。在Guid
中,您可以看到它将所有的组合成员设置为0
。
Guid.Empty
只是通过调用默认构造函数缓存默认值:
public struct Guid : IFormattable, IComparable, IComparable<Guid>, IEquatable<Guid>
{
public static readonly Guid Empty = new Guid();
}
另一种回答问题的方式,通过一个具体的例子:
c#允许你创建泛型类型(模板),它接受参数类型。
例如:
public class MyTemplate<T>
可以在T上定义各种约束: "Not null", "有构造函数", "是一个类",等等。
:
public class MyTemplate<T> where T: notnull, new() // etc.
额外约束:您可能希望使T 不可为空,并且仍然返回默认值,该值可能不是"null"!
public class MyTemplate<T> where T: notnull, new() {
public MyTemplate() {
var t = new T(); // If T is a Guid, then this returns Guid.Empty.
//var t = default; // Even if T is a Guid,
// C# will still panic here because
// it's not sure if the "default" of T
// (which you know to be Guid.Empty)
// is nullable or not -- despite you
// having defined T as notnull!
}
}
总结:
你可以自己看到,根据上下文,相同的值 (guide . empty)可以从不同的概念派生出来:在一种情况下,它是无参数构造函数的结果,在另一种情况下,它是默认值。
因为c#不能预测你想做什么(如果你足够深入抽象,那么你可能想要一个场景,或另一个,或两个!)它实现了所有的概念单独,即使它们给出相同的结果。因此,您最终获得new Guid()
和Guid.Empty
,以使用例(每个抽象)满意。