これと同じメソッド/署名を使用する必要があり、次のタイプを使用する必要T
がある場合(そして、そのような理由がありますが、ない場合は、Albinの回答を参照してください):
public static T GetValue<T>(T defaultValue)
{
// Need to use typeof to get a Type object for bool, just as with T
if (typeof(T) == typeof(bool)) {
// Need to say "get out of my way C#"
// The first cast to object is required as true (bool) is
// otherwise not castable to an unrestricted T.
// This widen-restrict approach could result in a cast error,
// but from the above check it is known that T is bool.
return (T)(object)true;
}
// .. other stuff that .. does stuff.
}
ただし、明示的にtrue
(ブール値のデフォルト値ではない)戻り、defaultValue
それ以外の場合は完全に無視するのは疑わしいようです。しかし-コンパイルします!それを出荷!
ノート:
==
タイプの使用は、サブクラスでは確実に機能しませんbool
(ただし、構造体であるため、サブタイプは問題になりません)。そのような場合は、を見てくださいIsAssignableFrom
。
typeof(T)
渡される値の型である必要はありません(null
参照型の場合もあります)。これは、サブタイプとともにis
、値を使用するアプローチに微妙な変化をもたらす可能性があります。