C# でオブジェクトのプロパティ名を使用して値のインスタンスを変更する方法

黄舟
リリース: 2017-09-18 11:01:29
オリジナル
3587 人が閲覧しました

抜粋: csdn

オブジェクトのプロパティへの値の割り当ては、PropertyInfo.SetValue() を通じて行うことができますが、値の型はプロパティと一致している必要があることに注意してください。

オブジェクト インスタンスを作成する 2 つの方法:

1.


var obj = Assembly.Load("AssemblyName").CreateInstance("AssemblyName"+"ClassFullName");
ログイン後にコピー

2.

 
var
 obj = Activator.CreateInstance(ClassType);
ログイン後にコピー

インスタンスを作成した後、現在のインスタンスの属性に値を割り当てることができます。割り当てられる。


var property = obj.GetType().GetProperty("PropertyName");//此时可以使用GetProperty获取属性数组,循环进行赋值,这里主要讲解类型问题。
ログイン後にコピー

割り当ては PropertyInfo.SetValue() メソッドを通じて実行できます。詳細については MSDN を参照してください。

ケース 1、属性の型は既知の型です。例: int


int value=500;
property.SetValue(obj,value,null);
ログイン後にコピー

ここで、値の型は属性の型と一致している必要があることに注意してください。そうでない場合は、TargetException がスローされます。

ケース 2、属性の型は既知の型で、元の値は別の型です。例: ターゲットの型は int で、値は string


string value="500";
property.SetValue(obj,int.TryParse(value),null);//类型转换。
ログイン後にコピー

最初の 2 つのケースは非常に単純です。場合によっては、ビジネスがより複雑になり、ターゲットの型が不確実で、プログラムの実行時に判断する必要があります。 。

ケース 3、属性の型が未知の非ジェネリック型で、ターゲットの型が不明な場合、型変換を実行する方法。


object value="500";
property.SetValue(obj,Convert.ChangeType(value,property.PropertyType),null);//类型转换。
ログイン後にコピー

これでほとんどの問題は解決します。

3 番目の状況で非ジェネリック型を強調したことに気づいたかどうかはわかりませんが、ジェネリック型は機能しません。
はい。 Convert.ChangeType() メソッドを使用しただけでも型変換でエラーが報告される場合は、まず次のコードを確認してください。

ターゲットの型と値の型が一致している場合でも、Convert.ChangeType() による変換時にエラーが報告されます。
この問題を解決するには、まず属性値の型を基本型に変換してから、Convert 変換を実行する必要があります。コードを見ると、Convert.ChangeType() を使用して null 許容型を変換するときにエラーは報告されません。
基本的な判断検証を追加すると、コードがより完全になります。


りー

以上がC# でオブジェクトのプロパティ名を使用して値のインスタンスを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート