web-dev-qa-db-ja.com

GUIDプロパティにnullを設定する方法

Guidプロパティを持つEmployee型のオブジェクトがあります。 nullに設定する場合は、typeプロパティをnullable Nullable<Guid>小道具またはGUID?小道具。

しかし、私の場合、プロップのタイプを変更することはできません。そのため、それはGuidタイプと同僚のままであり、Guid.Emptyを使用したくありません。

データベースのフィールドをnullとして再構築するために、プロパティをnullまたはstring.emptyに設定する方法はありますか。

String.emptyからnullに変換するメカニズムがありますが、空のGUIDをnullに受け入れるように変更する場合は、多くのことを変更します。

助けてください!

17
Maximus Decimus

データベースのフィールドをnullとして再構築するために、プロパティをnullまたはstring.emptyに設定する方法はありますか。

いいえ。nullできないためです。 NULL可能にしたい場合は、_Nullable<Guid>_を使用する必要があります。そうしなかった場合、_Nullable<T>_を使用しても意味がありません。ここにfundamentalの問題があります-最初の段落を考えると、実際に知っています。 「Aを達成したいなら、私はBをしなければなりませんが、BをしなくてもAを達成したいのです」とあなたは言いました。それは不可能です定義により

最も近いものは、特定の1つを使用してGUID= null値を表す-_Guid.Empty_(必要に応じてdefault(Guid)としても使用可能)オプションのパラメータのデフォルト値)は明らかな候補ですが、不特定の理由で拒否しました。

48
Jon Skeet
Guid? myGuidVar = (Guid?)null;

かもしれない。不要なキャストは不要です。

Guid? myGuidVar = null;
20
A.S

「Guid」はヌル値を許可しないため、「Guid.Empty」をデフォルト値として使用します。

9
macrobbsen

毒を選択してください-プロパティのタイプをnullに変更できない場合は、「マジック」値を使用してNULLを表す必要があります。 _Guid.Empty_は、使用しない特定の理由がない限り、他と同じように思えます。 2番目の選択肢はGuid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff")になりますが、これは非常にい私見です。

9
D Stanley

最初に?次に、Guid.Emptyを使用するか、(Guid?)nullを使用してnullに型キャストします。

例えば:

 Guid? id = Guid.Empty;

または

 Guid? id =  (Guid?)null;
2
Ranjith

データベース関数からGUID値を抽出します。

    #region GUID

    public static Guid GGuid(SqlDataReader reader, string field)
    {
        try
        {
            return reader[field] == DBNull.Value ? Guid.Empty : (Guid)reader[field];
        }
        catch { return Guid.Empty; }
    }

    public static Guid GGuid(SqlDataReader reader, int ordinal = 0)
    {
        try
        {
            return reader[ordinal] == DBNull.Value ? Guid.Empty : (Guid)reader[ordinal];
        }
        catch { return Guid.Empty; }
    }

    public static Guid? NGuid(SqlDataReader reader, string field)
    {
        try
        {
            if (reader[field] == DBNull.Value) return (Guid?)null; else return (Guid)reader[field];
        }
        catch { return (Guid?)null; }
    }

    public static Guid? NGuid(SqlDataReader reader, int ordinal = 0)
    {
        try
        {
            if (reader[ordinal] == DBNull.Value) return (Guid?)null; else return (Guid)reader[ordinal];
        }
        catch { return (Guid?)null; }
    }

    #endregion
0
Ángel Ibáñez