मुझे प्रतिनिधियों और सी # भाषा डिजाइन के बारे में कुछ और जानने की जरूरत है।प्रतिनिधि के आमंत्रण की परिणाम सूची कैसे प्राप्त करें?
Let कहते हैं, मैं एक MulticastDelegate
कि सामान्य प्रतिनिधि लागू करता है और कई कॉल शामिल है:
Func<int> func = null;
func += ()=> return 8;
func +=() => return 16;
func +=() => return 32;
अब इस कोड 32 वापस आ जाएगी:
int x = func(); // x=32
मैं अगर जानना चाहते हैं वहाँ मौजूद है (या बेहतर मुझे पूछना चाहिए कि यह क्यों अस्तित्व में नहीं है!) सी # भाषा सुविधा जिसका उपयोग सभी प्रतिनिधि के आमंत्रण के परिणामों तक पहुंच प्राप्त करना संभव है, जिसका मतलब है सूची ({8,16,32}) प्राप्त करना?
बेशक यह .NET फ्रेमवर्क दिनचर्या का उपयोग करके ऐसा करना संभव है। कुछ इस तरह काम करेंगे:
public static List<TOut> InvokeToList<TOut>(this Func<TOut> func)
{
var returnValue = new List<TOut>();
if (func != null)
{
var invocations = func.GetInvocationList();
returnValue.AddRange(invocations.Select(@delegate => ((Func<TOut>) @delegate)()));
}
return returnValue;
}
लेकिन मैं (जब प्रतिनिधियों कर रहे हैं वास्तव में, क्यों MulticastDelegate साधारण नहीं है) प्रणाली है कि वहाँ बेहतर तरीका होना चाहिए, कम से कम कास्टिंग के बिना से बाहर नहीं कर सकते?
MulticastDelegate ढांचे में 1.1 के बाद से किया गया है, जिसका अर्थ है जब यह कोडित किया गया था वहाँ किसी भी जेनरिक उपलब्ध नहीं था: यहाँ एक छोटा सा उदाहरण है। – Will