反射給物件賦值遇到的問題 型別轉換

2021-07-09 06:20:12 字數 1548 閱讀 5392

給乙個物件屬性賦值可以通過propertyinfo.setvalue()方式進行賦值,但要注意值的型別要與屬性保持一致。   

建立物件例項的兩種方法: 1.1

var obj = assembly.load("assemblyname").createinstance("assemblyname"+"classfullname");

2.1var obj = activator.createinstance(classtype);

以後有時間再把這兩種的區別詳細講一下。

建立好例項時,現在可以給當前例項的某個屬性賦值,首先獲取要賦值的屬性。

1

var property = obj.gettype().getproperty("propertyname");//此時可以使用getproperty獲取屬性陣列,迴圈進行賦值,這裡主要講解型別問題。

賦值可通過propertyinfo.setvalue()方法,詳見msdn。

情況1,該屬性型別是已知

型別,例如:int 1

2

intvalue=500;

property.setvalue(obj,value,null);

這裡需要注意value值的型別必須和屬性型別一致,否則會丟擲targetexception異常。

情況2,該屬性型別是已知

型別,原值是其他型別。例如:目標型別為int,值為string 1

2

stringvalue="500";

property.setvalue(obj,int.tryparse(value),null);//型別轉換。

前兩種情況都很簡單,有時業務會比較複雜,對目標型別不確定,需要程式執行時判斷。

情況3,

該屬性型別是未知

非泛型型別,不確定目標型別,如何進行型別轉換。 1

2

objectvalue="500";

property.setvalue(obj,convert.changetype(value,property.propertytype),null);//型別轉換。

這樣就可以解決大多數問題了。

C 反射給物件賦值遇到的問題 型別轉換

給乙個物件屬性賦值可以通過propertyinfo.setvalue 方式進行賦值,但要注意值的型別要與屬性保持一致。建立物件例項 1 var obj assembly.load assemblyname createinstance assemblyname classfullname 2 var...

python中連續賦值遇到的問題

在學習生成器的時候做了乙個生成斐波那契數列的練習,下面是練習的 import sys def fib n a,b,count 0,1,0 while 1 if count n return yield a a,b,count b,a b,count 1 f fib 10 while 1 try pr...

java使用反射給物件屬性賦值的兩種方法

主程式 public class testreflectset public void setreadonly string readonly 方法1 testreflectset t new testreflectset field f t.getclass getdeclaredfield re...