我有一个像这样定义的方法:
public bool IsValid(string propertyName, object propertyValue)
{
bool isValid = true;
// Validate property based on type here
return isValid;
}
我想做点什么:
if (propertyValue is bool?)
{
// Ensure that the property is true
}
我的挑战是,我不确定如何检测我的propertyValue是否是可以为空的bool。有人能告诉我怎么做吗?
谢谢!
答案 0 :(得分:11)
propertyValue
的值永远不会成为Nullable<bool>
。由于propertyValue
的类型为object
,因此任何值类型都将被装箱...如果您装入可空值类型值,则它将成为空引用或基础非值的盒装值-nullable type。
换句话说,您需要在不依赖值的情况下找到类型...如果您可以为我们想要实现的目标提供更多背景信息,我们可能能够帮助你更多。
答案 1 :(得分:2)
你可能需要使用泛型,但我认为你可以检查属性值的可空底层类型,如果它是bool,它是一个可以为空的bool。
Type fieldType = Nullable.GetUnderlyingType(typeof(propertyvalue));
if (object.ReferenceEquals(fieldType, typeof(bool))) {
return true;
}
否则尝试使用通用
public bool IsValid<T>(T propertyvalue)
{
Type fieldType = Nullable.GetUnderlyingType(typeof(T));
if (object.ReferenceEquals(fieldType, typeof(bool))) {
return true;
}
return false;
}
答案 2 :(得分:1)
这可能是一个很长的镜头,但你可以使用泛型和方法重载让编译器为你解决这个问题吗?
public bool IsValid<T>(string propertyName, T propertyValue)
{
// ...
}
public bool IsValid<T>(string propertyName, T? propertyValue) where T : struct
{
// ...
}
另一个想法:您的代码是否试图遍历对象上的每个属性值?如果是这样,您可以使用反射来遍历属性,并以这种方式获取它们的类型。
在他的回答中使用Nullable.GetUnderlyingType
作为Denis可以解决使用过载的问题。