2016-11-03 36 views
-1

可以說我有類與大量的冗餘特性,我想將它們存儲在列表中,詞典或任何改變對象的屬性,而將其存儲在列表

public class Foo 
{ 
public Bar Bar1 {get;set;} 
public Bar Bar2 {get;set;} 
public Bar Bar3 {get;set;} 
public Buzz Buzz1 {get;set;} 
public Buzz Buzz2 {get;set;} 
public Buzz Buzz3 {get;set;} 


public void UpdateObject(Buzz newValue) 
{ 
var dict = new List<KeyValuePair<Bar, Func<Buzz >>>() 
     { 
       new KeyValuePair<Bar, Func<Buzz>>(this.Bar1 ,()=>this.Buzz1), 
       new KeyValuePair<Bar, Func<Buzz>>(this.Bar2 ,() => this.Buzz2), 
       new KeyValuePair<Bar, Func<Buzz>>(this.Bar3 ,() => this.Buzz3) 
     }; 

foreach (var item in dict) 
     { 
      if (true) 
      { 
       var value = item.Value.Invoke(); 
       value = newValue; 
      } 
     } 
} 

} 

當然value的改變,但Foo的Buzz1/2/3財產不是。我如何存儲對列表中的對象屬性的某種引用,獲取此項目並更改對象的值?

回答

2

而是用鑰匙和一個二傳手,存儲密鑰,一個getter和setter方法的鍵值對:

List<Tuple<Bar, Func<Buzz>, Action<Buzz>> 

Action<Buzz>是一個lambda是需要爲Buzz一個新值作爲參數。

var dict = new List<Tuple<Bar, Func<Buzz>, Action<Buzz>> 
    { 
     new Tuple<Bar, Func<Buzz>, Action<Buzz>(this.Bar1 ,()=>this.Buzz1, x => this.Buzz1 = x), 
     // ...etc... 
    }; 

不知道你爲什麼這樣做,但那會奏效。

如果是我,而不是TupleKeyValuePair,我會寫一個ThingReference<T>類,帶有兩個lambda表達式,並存儲那些在Dictionary<Bar, ThingReference<Buzz>>

相關問題