我特別提請注意無效傳播,因爲它屬於bool?
並使用返回方法bool
。例如,考慮以下因素:空傳播爲什麼不一致地傳播Nullable <T>?
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
return property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any();
}
這並不編譯,並且下面的錯誤存在:
無法隱式轉換布爾?布爾。存在明確的轉換(您是否缺少演員表)?
這意味着它是治療方法的整個身體作爲bool?
,因爲這樣我會承擔,我可以說,.Any()
後.GetValueOrDefault()
但這是不允許的.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;
}
我的問題是,爲什麼我不能直接調用.GetValueOrDefault()
鏈接調用.Any()
?
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',它不是可以爲空的類型。將返回類型更改爲'bool?'。 – Abion47