【问题标题】:C# Convert a generic object into a booleanC# 将泛型对象转换为布尔值
【发布时间】:2015-07-24 19:29:12
【问题描述】:

我正在从 sqlite 阅读器读取数据。它返回一个object,我知道其中大多数是boolean。将object 转换为boolean 的最佳方法是什么?

【问题讨论】:

  • 如果你知道它是boolean,你应该可以直接转换它:var yourobj = (bool)valuefromreader;
  • 出于某种原因,这似乎不起作用,但我想它确实有效。我想我正试图同时将它转换为字符串。谢谢
  • 没关系。当我尝试像 var obj = (bool)reader["field"] 那样投射它时,我得到了一个无效的投射

标签: c#


【解决方案1】:

我可能会通过TryParse。否则,您将面临引发异常的风险。但这取决于您的系统是如何编写的。

object x;

bool result = false;

if(bool.TryParse(string.Format("{0}", x), out result))
{
    // do whatever
}

或者你也可以直接施法:

bool result = (bool)x;

或使用Convert 类:

bool result = Convert.ToBoolean(x);

或者您可以使用Nullable<bool> 类型:

var result = x as bool?;

【讨论】:

    【解决方案2】:

    在这种情况下,您可能需要as operator。请记住,您的类型是bool?

    【讨论】:

    • 我认为这会起作用并且是我第一次尝试的方法,但我确实需要bool,不过谢谢
    【解决方案3】:

    像这样:

    bool? val = YourValue as bool?;
    if (val != null)
    {
       ....
    }
    

    【讨论】:

      【解决方案4】:

      尝试转换它。

      var boolValue = (bool)yourObject;
      

      【讨论】:

      • 这不是一个好方法,因为它会在失败时抛出异常。使用 tryParse
      【解决方案5】:

      如果您想将对象转换为布尔类型,您只需检查对象is 是否为布尔类型,然后将其强制转换,如下所示:

      if (someObject is bool)
      {
          bool someBool = (bool)someObject;
          ...
      }
      

      附带说明,不能在非引用类型上使用as 运算符(因为它不能为空)。此问题可能与this one 重复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多