如果您查看Guid(string)
的构造函数的源代码in the .NET 4.5.2 source code如下:
public Guid(String g)
{
if (g==null) {
throw new ArgumentNullException("g");
}
Contract.EndContractBlock();
this = Guid.Empty;
GuidResult result = new GuidResult();
result.Init(GuidParseThrowStyle.All);
if (TryParseGuid(g, GuidStyles.Any, ref result)) {
this = result.parsedGuid;
}
else {
throw result.GetGuidParseException();
}
}
问题是 this = Guid.Empty;
这行的目的是什么?
据我所知,如果 string g
可以在 TryParseGuid
方法中成功解析,那么 this
将被赋值。如果不能,则会抛出异常。
假设你写了:
var guid = new Guid("invalidguid");
这会导致异常,我认为 guid 的值是未定义的。那么为什么需要将 this
分配给 Guid.Empty
?
最佳答案
这更多的是风格问题 - 从功能上讲它是多余的,编译器甚至可以在生成的代码中优化掉对 Guid.Empty
的赋值。
防御性编码建议变量应始终明确分配初始值。为什么?因为它减少了歧义,特别是对于那些不熟悉给定编程语言/平台细节的人。例如有人可能会问:
- Guid 的默认值是多少?
- 它应该是一个新的 Guid 吗?
- 它应该全为零吗?
- 是否应该是其他不确定状态?
在声明中:
Guid id = Guid.Empty;
所有这些问题基本上都可以通过阅读代码来回答,而不必求助于阅读文档和/或源代码。此外,很明显,变量 id
开始时为空,这向读者表明稍后将在代码中设置它的值。
关于c# - 为什么 Guid 构造函数的源代码包含 "this = Guid.Empty"行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29506330/