Хотите поставить там, что там не так много, чтобы беспокоиться о том, если кто-то дает ответ, как метод расширения, потому что расширение метод - просто классный способ вызова метода экземпляра. Я понимаю, что вы хотите получить ответ без использования метода расширения. Независимо от того, как метод определяется как статический, экземпляр или расширение - результат тот же.
В приведенном ниже коде используется код из принятого ответа для определения метода расширения и метода экземпляра и создается модульный тест, чтобы показать, что вывод одинаков.
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 <> делегаты - это общие делегаты для методов WITHOUT возвращаемых значений. Это единственное различие. – TheSoftwareJedi 2008-12-04 02:25:01
, поэтому в вашем случае вам не нужно что-то возвращать (из console.writeline - так достаточно действия. –
TheSoftwareJedi
2008-12-04 02:25:37