在我的代码中,我使用这样的反射获取属性的类型:
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
我看到有一些霸主,但没有一个使用我正在尝试的语法。
我该如何进行转换?
答案 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
值。