Как проверить, если объект, который я получить в качестве результата метода не ValueType
и не IEnumerable<ValueType>
?Проверьте IEnumerable имеют ValueType (во время выполнения)
Вот что я писал:
MethodInfo selectedOverload = SelectOverload(selectedMethodOverloads);
object result = ExecuteAndShowResult(selectedOverload);
ExploreResult(result);
private static void ExploreResult(object result)
{
if (result != null &&
!(result is ValueType) &&
!((IEnumerable)result).GetType().GetProperty("Item").PropertyType) is ValueType)
)
Console.WriteLine("explore");
}
К сожалению тип PropertyType
является Type
, его содержание типа мне нужно проверить (например, int
), но я не знаю, как.
EDIT:
Хорошо, .IsValueType
работал, но теперь я хочу также, чтобы исключить строки (которые не признаются как типы значений), так что?
!(((IEnumerable)result).GetType().GetProperty("Item").PropertyType is string)
не работает!
EDIT 2:
Просто ответил себе:
!(((IEnumerable)result).GetType().GetProperty("Item").PropertyType == typeof(string))
Вопрос остается открытым о том, что если я хочу, чтобы проверить наследование от базового класса:
!(((IEnumerable)result).GetType().GetProperty("Item").PropertyType == typeof(BaseClass))
не работает, потому что TYPEOF проверяет тип выполнения, и если PropertyType == InheritedClassType
вернет ложь ...
Вы просто значит 'GetProperty («Item»). PropertyType.IsValueType'? –
Тип.IsValueType? –
Спасибо за ответы! Это то, что мне нужно. – Teejay