2014-09-21 109 views
2

我有一個屬性爲ct1-ct5的對象。該對象是一個自動生成的linq-to-sql對象。我想在c#中爲這些屬性賦值。有沒有辦法在for循環中做到這一點?動態地爲對象屬性賦值

例如像(對象名稱:new_condition):

for (int i = 1; tag <= 5; i++) 
{ 
    new_condition.cti = values[i]; 
} 

其中CTI的i獲取評估。

在此先感謝

+1

只能通過反射,恐怕 – lesscode 2014-09-21 02:56:40

回答

3

您可以使用反射。例如,supose你有一個類A這樣的:

class A 
{ 
    public int P1 { get; set; } 
    public int P2 { get; set; } 
    public int P3 { get; set; } 
} 

你可以不喜歡這樣簡單的控制檯樣品中:

static void Main(string[] args) 
{ 
    var a = new A(); 
    foreach (var i in Enumerable.Range(1,3)) 
    { 
     a.GetType().GetProperty("P" + i).SetValue(a, i, null); 
    } 
    Console.WriteLine("P1 = {0}",a.P1); 
    Console.WriteLine("P2 = {0}",a.P2); 
    Console.WriteLine("P3 = {0}",a.P3); 
    Console.ReadLine(); 
} 

輸出將是:

P1 = 1 
P2 = 2 
P3 = 3 
+0

嗨,謝謝你的回答。我想我會使用這個解決方案。你能否擴展爲什麼反射是唯一的解決方案。僅僅是因爲GetProperty()方法需要一個字符串參數,因此可以像這樣動態使用,或者是否有一些關於反射的東西適用於這種特殊情況? – bob 2014-09-21 04:25:19

+0

反射不是唯一的選擇,但在這種情況下,它是更好的選擇。 – brz 2014-09-21 04:33:54

+0

好吧,但爲什麼它是更好的選擇? – bob 2014-09-21 05:34:52

1

旁邊如已經建議的那樣反射,您可以創建一個Dictionary<string,Action<T>>,爲您完成分配任務。類似這樣的:

public static int a0; 
public static int a1; 
public static int a2; 

public static Dictionary<string, Action<int>> actions = new Dictionary<string, Action<int>> { 
{"a0", val => a0 = val}, {"a1", val => a1 = val}, {"a2", val => a2 = val }}; 

static void Main(string[] args) 
{ 
    for (int i = 0; i < 3; i++) 
     actions["a" + i](i * 2); 

    Console.WriteLine(a0); 
    Console.WriteLine(a1); 
    Console.WriteLine(a2); 
}