2013-02-26 149 views
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.FieldString它說第一個參數應該是object,我看到有一些霸主,但沒有使用的語法,我正在嘗試。

我該如何做這種轉換?

回答

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

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

將指定值轉換爲64位有符號整數。

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

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

由於thisConvert.ChangeType超載返回object,您可以將其轉換爲long值。

相關問題