元組是不可變的,所以你不能改變它的值。當你有不可變的對象時,改變它們的方法是返回一個新的對象,並且改變所需的屬性。所以,如果你想堅持的元組,你可以做這樣的事情:
public static class TupleExtensions {
public static Tuple<T1, T2, T3>
WhereItem3Is<T1, T2, T3>(this Tuple<T1, T2, T3> self, T3 newValue) {
return Tuple.Create(self.Item1, self.Item2, newValue);
}
// other methods for Tuple<,,> or other Tuples...
}
而且使用這樣的:
var t = Tuple.Create(1, 2, 3);
// ...
t = t.WhereItem3Is(4);
但它的痛苦寫所有這些方法一點點。所以,如果你需要很多的,更好的只是這樣做:
var t = Tuple.Create(1, 2, 3);
t = Tuple.Create(t1.Item1, t1.Item2, 4);
你甚至可以有你會使用引用來自不同地方的元組在你的代碼的包裝類型,所以,任何「改變」可能可見:
var t = Tuple.Create(1, 2, 3);
var r = new Ref<Tuple<int, int, int>>(t);
// share r ...
r.Value = Tuple.Create(r.Value.Item1, r.Value.Item2, 4);
...
public class Ref<T> {
public T Value { get; set; }
public Ref(T value) { Value = value; }
}
所有這一切,雖然感覺很彆扭。也許你可以更好地解釋你所遇到的必不可少的問題,這樣可以提供更好的答案。也許你真的不需要元組,只是更具體到你的域。
您發佈的內容越多,您希望'Tuple <>'看起來越少,您似乎就越想要一個真正的類來模擬您的域。 –
也許我誤解了一個元組是什麼,但我只想要一個具有與元組相同行爲的類,除了我希望屬性可以改變。我發佈這個新問題是因爲它讓我覺得這是一個更簡單的解決方案,而不是實現我所談論的接口 – GianT971
如果你可以創建一個描述你所遇到的問題的_short_問題,我想你會得到更好的答案試圖建模,而不是一些機械問題關於做一個非常具體的(看起來很尷尬)的方式 –