我使用的是結構中的一個項目,像這樣:有沒有更清晰的方式來代表這個成語在C#中?
struct Position
{
public int X { get; private set; }
public int Y { get; private set; }
// etc
}
我想補充的方法,讓我創造了結構的修改副本隨意更改的屬性。例如,使用它可能會很方便:
var position = new Position(5, 7);
var newPos = position.With(X: position.X + 1);
這個習語hacky?有更好的方法來支持嗎?
public Position With(int? X = null, int? Y = null)
{
return new Position(X ?? this.X, Y ?? this.Y);
}
編輯:如果現在還不清楚,該結構是不可改變的,我只是想創建修改一些值的新值。順便提一句,這與Haskell的記錄語法糖非常相似,其中一個會寫newPos = oldPos { x = x oldPos + 1 }
。對於這樣一個習語在C#中是否有用,這只是一個實驗。
屬於http://codereview.stackexchange.com – MikroDel
我原以爲創建一個深層克隆的接口會更合適。請注意,不建議使用標準ICloneable,請參閱http://blogs.msdn.com/b/brada/archive/2003/04/09/49935.aspx – chrisw
您是否真的需要結構可變嗎?你肯定需要*一個*方法而不是兩個? –