想要把在那裏,沒有什麼可擔心的,如果有人提供了一個答案作爲一個擴展的方法,因爲擴展方法只是調用實例方法的一種很酷的方式。我明白你想要的答案不使用擴展方法。無論方法被定義爲靜態,實例還是擴展 - 結果都是一樣的。
下面的代碼使用來自接受答案的代碼來定義擴展方法和實例方法,並創建單元測試以顯示輸出是相同的。
public static class Extensions
{
public static void Each<T>(this IEnumerable<T> items, Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
}
[TestFixture]
public class ForEachTests
{
public void Each<T>(IEnumerable<T> items, Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
private string _extensionOutput;
private void SaveExtensionOutput(string value)
{
_extensionOutput += value;
}
private string _instanceOutput;
private void SaveInstanceOutput(string value)
{
_instanceOutput += value;
}
[Test]
public void Test1()
{
string[] teams = new string[] {"cowboys", "falcons", "browns", "chargers", "rams", "seahawks", "lions", "heat", "blackhawks", "penguins", "pirates"};
Each(teams, SaveInstanceOutput);
teams.Each(SaveExtensionOutput);
Assert.AreEqual(_extensionOutput, _instanceOutput);
}
}
毫不誇張地說,你需要做的擴展方法轉換爲實例方法的唯一事情就是去掉static
修改和方法的第一個參數。
此方法
public static void Each<T>(this IEnumerable<T> items, Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
變得
public void Each<T>(Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
冷卻。現在我所看到的Func <>語法在哪裏起作用? – BuddyJoe 2008-12-04 01:21:30
Func <>委託是具有返回值的方法的通用委託。 Action <>委託是沒有返回值的方法的通用委託。這是唯一的區別。 – TheSoftwareJedi 2008-12-04 02:25:01
所以在你的情況下,你不需要返回一些東西(從console.writeline - 所以動作就足夠了。 –
TheSoftwareJedi
2008-12-04 02:25:37