वहाँ बाहर डाल करने के लिए किसी को वहाँ क्योंकि एक विस्तार एक विस्तार पद्धति के रूप में एक जवाब प्रदान करता है, तो के बारे में चिंता करने के लिए काफी नहीं है कि चाहते हैं विधि एक उदाहरण विधि कॉल करने के लिए बस एक अच्छा तरीका है। मैं समझता हूं कि आप एक्सटेंशन विधि का उपयोग किए बिना जवाब चाहते हैं। भले ही विधि को स्थैतिक, उदाहरण या एक्सटेंशन के रूप में परिभाषित किया गया हो - परिणाम वही है।
नीचे दिया गया कोड एक विस्तार विधि और एक उदाहरण विधि को परिभाषित करने के लिए स्वीकृत उत्तर से कोड का उपयोग करता है और आउटपुट दिखाने के लिए यूनिट परीक्षण बनाता है।
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);
}
}
स्रोत
2013-10-30 02:35:44
कूल हो जाता है। अब फनक <> वाक्यविन्यास जहां मैंने देखा है, खेल में आता है? – BuddyJoe
Func <> प्रतिनिधि वापसी मूल्यों के तरीकों के लिए सामान्य प्रतिनिधि हैं। एक्शन <> प्रतिनिधि वापसी मूल्यों के बिना विधियों के लिए सामान्य प्रतिनिधि हैं। केवल अंतर है। – TheSoftwareJedi
तो आपके मामले में, आपको कुछ वापस करने की आवश्यकता नहीं है (console.writeline से - तो एक्शन पर्याप्त है। –
TheSoftwareJedi