【问题标题】:How to convert property from one type to another?如何将属性从一种类型转换为另一种类型?
【发布时间】:2013-02-26 13:34:52
【问题描述】:

在我的代码中,我使用这样的反射来获取属性的类型:

 foreach(FilterRule rule in filter.Rules)
 {
     PropertyInfo property = typeof(T).GetProperty(rule.Field);
 }

之后我进行了几次检查以找出它实际上是什么类型以及类型是否为long?:

 else if (property.PropertyType == typeof(long?))
 {
     long dd = Convert.ChangeType(rule.Field, System.Int64);
 }

我想转换成System.Int64 类型。或者更具体到 long 而不可以为空,但似乎我没有得到这个,因为 rule.Field 是 String 并且它说第一个参数应该是 object 我看到有一些霸主但是没有使用我正在尝试的语法。

我该如何进行这种转换?

【问题讨论】:

    标签: c# .net type-conversion


    【解决方案1】:

    在您使用Convert.ChangeType 时,第二个参数应该是typeof(System.Int64)(typeof 运算符返回System.Type 的实例)而不是简单的System.Int64。

    此外,您应该向long 添加显式转换(因为ChangeType 返回Object):

    long dd = (long)Convert.ChangeType(rule.Field, typeof(System.Int64));
    

    但是,这似乎是使用 Convert.ToInt64 method 代替的完美案例:

    long dd = Convert.ToInt64(rule.Field);
    

    【讨论】:

      【解决方案2】:

      用Convert.ToInt64()方法怎么样?

      将指定值转换为 64 位有符号整数。

      long lfield = Convert.ToInt64(rule.Field);
      

      作为

      var lfield = (long)Convert.ChangeType(rule.Field, typeof(System.Int64));
      

      由于Convert.ChangeType 的this 重载会返回object,因此您可以将其强制转换为long 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-24
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        相关资源
        最近更新 更多