什么时候newGuid()00000000-0000-0000-0000-000000000000,什么时候不是?
c#
我有一个很大的日志 C# 文件。我的客户抱怨某些 SessionId 为 00000000-0000-0000-0000-000000000000。第一种方法
public static StartServiceLog CreateStartServiceLog(string serviceName, Guid sessionId = new Guid(), Device device = null, string userId = null)
{
if (device == null)
{
device = CreateDeviceInfo();
}
return new StartServiceLog(device, DateTime.UtcNow, sessionId, userId, new List<string>() { serviceName });
}
我称这个方法
var session = new StartSessionLog
{
Sid = sessionId,
Device = device,
Timestamp = DateTime.UtcNow,
};
return session;
如何找出 SessionIds 何时将全部为零或将被覆盖?
回答
System.Guid是一个结构,而不是一个类。这意味着它的无参数构造函数不能做任何工作,因此,new Guid() == default.
structs 的默认值是所有成员都设置为默认值。在 的情况下Guid,它是一堆数字,所以它的视觉表示最终都是零。
要创建Guid具有实际值的 a,您需要调用Guid.NewGuid()静态方法。这不能在默认参数初始值设定项中完成,因此您需要更改您的方法以采用可空值 Guid?:
public static void Foo(string etcetera, Guid? sessionId = null)
{
if (sessionId == null)
{
sessionId = Guid.NewGuid();
}
// Do something with `sessionId.Value`
}
THE END
二维码