2

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

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

我该如何进行这种转换?

4

2 回答 2

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方法的完美案例:

long dd = Convert.ToInt64(rule.Field);
于 2013-02-26T13:38:03.267 回答
1

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

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

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

作为

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

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

于 2013-02-26T13:38:44.643 回答