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。または、null許容型がない場合に具体的に説明しますが、これはlong取得できないようです。最初の引数はanである必要があり、一部のオーバーロードが存在するようですが、私が試している構文を使用するものはありません。rule.FieldStringobject

この変換を行うにはどうすればよいですか?

4

2 に答える 2

2

の使用法でConvert.ChangeTypeは、2番目のパラメーターは単純にではなくtypeof(System.Int64)typeof演算子がのインスタンスを返す)である必要があります。System.TypeSystem.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返すのでobject、値にキャストできlongます。

于 2013-02-26T13:38:44.643 に答える