如何将属性从一种类型转换为另一种类型?

时间:2013-02-26 13:34:53

标签: c# .net type-conversion

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

 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.FieldString并且它说第一个参数应该是object我看到有一些霸主,但没有一个使用我正在尝试的语法。

我该如何进行转换?

2 个答案:

答案 0 :(得分:2)

在您使用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);

答案 1 :(得分:1)

如何使用 Convert.ToInt64() 方法?

  

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

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

作为

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

由于Convert.ChangeType this 重载返回object,您可以将其转换为long值。