我有以下方法:
void Test<T>(T Result)
我需要实现这样的事情:
if Result is null, or T is a bool and that bool is false
我尝试做类似
的事情if (typeof(T) == typeof(bool)
{
if ((bool)Result == false) // doesn't work
if (Result as bool == false) // doesn't work
如何在不创建两个方法的情况下实现此目的?
答案 0 :(得分:2)
您可以尝试将其转换为可以为空的bool
并对其进行测试:
public void Test<T>(T result)
{
var asBool = result as bool?;
if (!asBool.HasValue || !asBool.Value)
{
// do whatever
}
}
(我将Result
更改为result
,因为它是参数)
答案 1 :(得分:0)
这是另一个通过T
将bool
投射到object
的解决方案(您无法直接将T
投射到bool
:
if ((bool)(object)result == false)
{
// bool with value set to false
}
如果性能受到关注,您可能还需要考虑对答案中提出的所有解决方案进行基准测试 - 请参阅"Performance surprise with “as” and nullable types"。
答案 2 :(得分:0)
您可以使用
进行测试if (EqualityComparer<T>.Default.Equals(result, default(T))) {
...
}
对于bool
,default(T)
为false
,参考类型为null
。对于所有其他类型,它是由设置为0
的所有位表示的值。即对于数字类型,它将是0
。