2014-01-22 108 views
0

我對這種反射概念很陌生,在從字符串中檢索屬性值時發現問題。例如。使用反射從字符串中獲取屬性值

我有一個Employee類具有以下屬性:

public string Name {get;set;} 
public int Age {get;set;} 
public string EmployeeID {get;set;} 

string s = "Name=ABCD;Age=25;EmployeeID=A12"; 

我想要從這個字符串每個屬性的價值,創造員工與來自字符串的每個字段檢索這些值的新對象。

任何人都可以請建議如何使用反射可以完成?

+0

獨立到這一點不同的任務爲例 - 首先你需要分析你的字符串,分裂它變成了不同的屬性。你到目前爲止有多遠? –

+0

我試圖用char來分割它「;」但我仍然無法理解如何使用反思的概念。 – user3223270

+0

因此,儘可能在反射之前儘可能地將其分解(分成名稱和值),然後您可以編輯您的問題以針對您在此時獲得的數據進行編輯......基本上,將問題縮小至最大程度盡你所能。 –

回答

0

//可以是..

字符串s = 「名稱= ABCD;年齡= 25;僱員= A12」;

 string[] words = s.Split(';'); 
     foreach (string word in words) 
     { 
      string[] data = word.Split('='); 
      string _data = data[1]; 
      Console.WriteLine(Name); 
     } 
+0

是的,這將鍛鍊以檢索所需的參數。從字符串中檢索數據是常用的方法。這與反思有關嗎? –

0

這裏的你怎麼可能做得來

它使用反射像你想^^

using System; 
using System.Collections.Generic; 
using System.Reflection; 

namespace replace 
{ 
    public class Program 
    { 
     private static void Main(string[] args) 
     { 
      var s = "Name=ABCD;Age=25;EmployeeID=A12"; 
      var list = s.Split(';'); 

      var dic = new Dictionary<string, object>(); 

      foreach (var item in list) 
      { 
       var probVal = item.Split('='); 
       dic.Add(probVal[0], probVal[1]); 
      } 

      var obj = new MyClass(); 

      PropertyInfo[] properties = obj.GetType().GetProperties(); 

      foreach (PropertyInfo property in properties) 
      { 
       Console.WriteLine(dic[property.Name]); 
       if (property.PropertyType == typeof(Int32)) 
        property.SetValue(obj, Convert.ToInt32(dic[property.Name])); 
       //else if (property.PropertyType== typeof(yourtype)) 
       // property.SetValue(obj, (yourtype)dic[property.Name]); 
       else 
        property.SetValue(obj, dic[property.Name]); 
      } 

      Console.WriteLine("------------"); 
      Console.WriteLine(obj.Name); 
      Console.WriteLine(obj.Age); 
      Console.WriteLine(obj.EmployeeID); 
      Console.Read(); 
     } 
    } 

    public class MyClass 
    { 
     public string Name { get; set; } 

     public int Age { get; set; } 

     public string EmployeeID { get; set; } 
    } 
} 
相關問題