具体的には、bool?
に関連し、返信方法をbool
とすることで、ヌル伝播に注意を促しています。たとえば、次の点を考慮します。ヌル伝播が一貫して伝播しない理由Nullable <T>?
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
return property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any();
}
これはコンパイルされませんし、次のエラーが存在する:
は、暗黙的にブール値に変換することができませんか?ブールに明示的な変換が存在します(キャストがありません)?
これは、私が.Any()
後.GetValueOrDefault()
を言うことができることを前提としていますよう、bool?
ような方法の全身を治療しているが、これは.Any()
戻りbool
ないbool?
として許されないことを意味します。
私は私の周りの仕事として、次のいずれかの操作を行うことができることを知っている:
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
return property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any()
?? false;
}
それとも
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
var any =
property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any();
return any.GetValueOrDefault();
}
それとも
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
return property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any()
?? false;
}
私の質問は、なぜ私がすることはできません.Any()
呼び出しで直接.GetValueOrDefault()
チェーンを呼び出しますか?
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
return (property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any())
.GetValueOrDefault();
}
私は、値が実際にbool?
この時点ではなくbool
であるとして、これは理にかなって思います。
をあなたは括弧をつけなければならないので、.'条件呼び出しチェーン知られている演算子を、終了: '(property?.AttributeProvider.GetAttributes(typeof(TAttribute)、false).Any())。GetValueOrDefault()'。 – PetSerAl
'property'がnullの場合、メソッドはnullを返そうとします。しかし、返り値の型は 'bool'なので、null型ではありません。戻り値の型を 'bool? 'に変更してください。 – Abion47