1. ホーム
  2. c#

[解決済み] new Guid() が 00000000-0000-0000-0000-0000-00000000 であるときとないときがあります。[重複している]。

2022-02-17 10:32:58

質問

<余談
この質問には、すでにここで回答があります :
クローズド 7ヶ月前 .

大きなログのC#ファイルを発見しました。クライアントから、一部のSessionIdsが00000000-0000-0000-0000-0000-00000000であるとクレームがありました。 第一の方法

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 .

構造体のデフォルト値は、すべてのメンバがデフォルト値に設定されています。の場合は Guid これは数字の集まりなので、視覚的にはすべてゼロになります。

を作成するには Guid を実際の値で呼び出す必要があります。 Guid.NewGuid() 静的メソッドです。これはデフォルトのパラメータ・イニシャライザの中ではできないので、メソッドを変更して nullable Guid? の代わりに

public static void Foo(string etcetera, Guid? sessionId = null)
{
    if (sessionId == null)
    {
        sessionId = Guid.NewGuid();
    }

    // Do something with `sessionId.Value`
}