Я специально обращаю внимание на нулевое распространение, поскольку оно относится к bool?
и использованию метода возврата bool
. Например, рассмотрим следующее:Почему нулевое распространение неуклонно распространяется Nullable <T>?
public static bool IsAttributedWith<TAttribute>(this JsonProperty property)
where TAttribute : Attribute
{
return property?.AttributeProvider
.GetAttributes(typeof(TAttribute), false)
.Any();
}
Это не компилируется, и следующая ошибка существует:
Не удается неявно преобразовать логическое значение? обмануть. Явное преобразование существует (вы пропускаете приведение)?
Это означает, что он обрабатывает все тело метода как bool?
, как таковой, я предположил бы, что я мог бы сказать .GetValueOrDefault()
после .Any()
, но это не допускается, как .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
.
Вы должны поставить скобки, так '.' оператор известно, где состояние вызова цепи end: '(свойство? .AttributeProvider.GetAttributes (typeof (TAttribute), false) .Any()). GetValueOrDefault()'. – PetSerAl
Если 'property' равно null, тогда метод попытается вернуть null. Однако это не может быть вызвано тем, что тип возвращаемого значения - 'bool', который не является типом с нулевым значением. Измените тип возврата на 'bool?'. – Abion47