列挙型の制約があるのに、なぜコンパイラでこのコードを記述できないのですか?
public static TResult? ToEnum<TResult>(this String value, TResult? defaultValue)
where TResult : Enum
{
return String.IsNullOrEmpty(value) ? defaultValue : (TResult?)Enum.Parse(typeof(TResult), value);
}
コンパイラは言う:
エラーCS0453型 'TResult'は、ジェネリック型またはメソッド 'Nullable'のパラメーター 'T'として使用するために、nullを許可しない値型である必要があります
可能ですが、別の制約を追加する必要があります:struct
制約。
public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}
System.Enum
はクラスであるため、Nullable<Enum>
型の変数を宣言することはできません(Nullable<T>
はT
がstruct
である場合にのみ可能であるため)。
副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example:
Enum? bob = null;
コンパイルされず、コードもコンパイルされません。
これは間違いなく奇妙です(Enum
自体はクラスですが、コードで定義する特定のEnum
はstruct
です)。 、ただし、 docs およびソースコードによると、明らかにclass
(struct
ではありません)です。