使用C#中的泛型检查bool值

时间:2017-09-03 17:19:58

标签: c#

我有以下方法:

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

如何在不创建两个方法的情况下实现此目的?

3 个答案:

答案 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)

这是另一个通过Tbool投射到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))) {
    ...
}

对于booldefault(T)false,参考类型为null。对于所有其他类型,它是由设置为0的所有位表示的值。即对于数字类型,它将是0