我試圖創建一個函數,它可以創建一個Action來增加傳入的任何整數。但是,我的第一次嘗試給了我一個錯誤「不能使用ref或out參數在匿名方法體內「。C#不能在一個匿名方法體內使用ref或out參數
public static class IntEx {
public static Action CreateIncrementer(ref int reference) {
return() => {
reference += 1;
};
}
}
我明白爲什麼編譯器不喜歡這樣,但儘管如此,我想有一個優雅的方式來提供一個很好的增量工廠,可以指向任何整數。我看到要做到這一點的唯一方法是類似於以下內容:
public static class IntEx {
public static Action CreateIncrementer(Func<int> getter, Action<int> setter) {
return() => setter(getter() + 1);
}
}
但當然,這是更多的來電者使用的痛苦;要求調用者創建兩個lambda表達式,而不是僅傳入一個引用。有沒有更優雅的方式提供這種功能,或者我只需要使用兩個lambda選項?
這是一個簡單的例子嗎?爲什麼不使用x ++?爲什麼這個類的另一個類增加狀態 – Gishu 2010-11-21 02:47:04
@Gishu是的,這是一個簡化的例子;較大的用例很難解釋,但這一切都歸結爲創建一個可以對值類型執行操作的Action工廠。 – 2010-11-21 02:55:13