Vous voulez mettre là-bas qu'il n'y a pas grand-chose à se soucier si quelqu'un apporte une réponse en tant que méthode d'extension, car une extension méthode est juste une façon cool d'appeler une méthode d'instance. Je comprends que vous voulez la réponse sans utiliser une méthode d'extension. Peu importe si la méthode est définie comme statique, instance ou extension - le résultat est le même.
Le code ci-dessous utilise le code de la réponse acceptée pour définir une méthode d'extension et une méthode d'instance et crée un test unitaire pour montrer que la sortie est la même. Littéralement
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);
}
}
, la seule chose que vous devez faire pour convertir une méthode d'extension à une méthode d'instance est de supprimer le modificateur static
et le premier paramètre de la méthode.
Cette méthode
public static void Each<T>(this IEnumerable<T> items, Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
devient
public void Each<T>(Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
cool. Maintenant, où est la syntaxe Func <> que j'ai vu autour de jouer? – BuddyJoe
Les délégués Func <> sont des délégués génériques pour les méthodes avec des valeurs de retour. Les délégués Action <> sont des délégués génériques pour les méthodes SANS les valeurs de retour. C'est la seule différence. – TheSoftwareJedi
donc dans votre cas, vous n'avez pas besoin de retourner quelque chose (depuis console.writeline - donc l'Action est suffisante. –
TheSoftwareJedi