2012-06-25 29 views
7

अस्वीकरण नहीं करता है अस्वीकरण: यह प्रश्न मेरी व्यक्तिगत जिज्ञासा से कुछ हासिल करने की वास्तविक आवश्यकता से अधिक है। तो मेरा उदाहरण बढ़ने जा रहा है। फिर भी मुझे लगता है कि यह एक मुद्दा है जो बहुत अच्छी तरह से फसल हो सकता है।एक बंदरगाह के साथ LINQ के ज़िप का उपयोग करना जो

मान लें कि हम दो अनुक्रमों को दोहराने के लिए Zip का उपयोग कर रहे हैं, एक शून्य विधि का आह्वान करते हुए, जो कि जोड़े का एक आइटम दूसरे से भिन्न होता है (इसलिए किसी भी वापसी मूल्य को छोड़कर) एक अपवाद फेंकता है। यहां बिंदु यह नहीं है कि विधि अपवाद फेंकता है, उतना ही यह शून्य हो जाता है।

दूसरे शब्दों में, हम दो संग्रहों पर ForEach कर रहे हैं (और वैसे, मुझे पता है कि Eric Lippert thinks about ForEach)।

अब, ZipFunc<TFirst, TSecond, TResult> चाहता है, इसलिए निश्चित रूप से Action<TFirst, TSecond> के बराबर कुछ गुजरना काम नहीं करेगा।

मेरा प्रश्न है: क्या कोई बेवकूफ तरीका है जो इससे बेहतर है (यानी एक डमी मूल्य लौटा रहा है)?

var collection1 = new List<int>() { ... }; 
var collection2 = new List<int>() { ... }; 

collection1.Zip(collection2, (first, second) => 
{ 
    VoidMethodThatThrows(first, second); 
    return true; 
}); 
+2

संबंधित एरिक Lippert ब्लॉग पोस्ट: http://blogs.msdn.com/b/ericlippert/archive/2009/06/29/the-void-is-invariant.aspx – AakashM

उत्तर

15

उपयोग Zip() एक वस्तु में आइटम फेंक, तो अपने foreach लेकिन जिस तरह से आप (एक सामान्य foreach पाश कृपया, नहीं बुरा ToList/foreach कॉम्बो करते हैं) का चयन करते हैं।

var items = collection1.Zip(collection2, (x, y) => new { First = x, Second = y }); 
foreach (var item in items) 
{ 
    VoidMethodThatThrows(item.First, item.Second); 
} 
+0

मीठा, मुझे यह पसंद है। धन्यवाद! –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^