Guidプロパティを持つEmployee型のオブジェクトがあります。 nullに設定する場合は、typeプロパティをnullable Nullable<Guid>
小道具またはGUID?小道具。
しかし、私の場合、プロップのタイプを変更することはできません。そのため、それはGuidタイプと同僚のままであり、Guid.Emptyを使用したくありません。
データベースのフィールドをnullとして再構築するために、プロパティをnullまたはstring.emptyに設定する方法はありますか。
String.emptyからnullに変換するメカニズムがありますが、空のGUIDをnullに受け入れるように変更する場合は、多くのことを変更します。
助けてください!
データベースのフィールドをnullとして再構築するために、プロパティをnullまたはstring.emptyに設定する方法はありますか。
いいえ。nullできないためです。 NULL可能にしたい場合は、_Nullable<Guid>
_を使用する必要があります。そうしなかった場合、_Nullable<T>
_を使用しても意味がありません。ここにfundamentalの問題があります-最初の段落を考えると、実際に知っています。 「Aを達成したいなら、私はBをしなければなりませんが、BをしなくてもAを達成したいのです」とあなたは言いました。それは不可能です定義により。
最も近いものは、特定の1つを使用してGUID= null値を表す-_Guid.Empty
_(必要に応じてdefault(Guid)
としても使用可能)オプションのパラメータのデフォルト値)は明らかな候補ですが、不特定の理由で拒否しました。
Guid? myGuidVar = (Guid?)null;
かもしれない。不要なキャストは不要です。
Guid? myGuidVar = null;
「Guid」はヌル値を許可しないため、「Guid.Empty」をデフォルト値として使用します。
毒を選択してください-プロパティのタイプをnullに変更できない場合は、「マジック」値を使用してNULLを表す必要があります。 _Guid.Empty
_は、使用しない特定の理由がない限り、他と同じように思えます。 2番目の選択肢はGuid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff")
になりますが、これは非常にい私見です。
最初に?次に、Guid.Emptyを使用するか、(Guid?)nullを使用してnullに型キャストします。
例えば:
Guid? id = Guid.Empty;
または
Guid? id = (Guid?)null;
データベース関数から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