C # में मैं LINQ और IEnumerable का एक अच्छा सा उपयोग करता हूं। और सब अच्छी तरह से और अच्छा है (या कम से कम ज्यादातर तो)।
हालांकि, कई मामलों में मैं खुद को पाता हूं कि मुझे IEnumerable<X>
एक डिफ़ॉल्ट के रूप में एक खाली की आवश्यकता है । यही है, मैं चाहूंगा
for (var x in xs) { ... }
बिना जांच-पड़ताल के काम करना। अब यह वही है जो मैं वर्तमान में करता हूं, जो बड़े संदर्भ पर निर्भर करता है:
var xs = f() ?? new X[0]; // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... } // inline, sometimes
अब, जबकि उपरोक्त मेरे लिए पूरी तरह से ठीक है - अर्थात, यदि कोई ऑब्जेक्ट "अतिरिक्त ओवरहेड" है, तो सरणी ऑब्जेक्ट बनाने के साथ मैं बस परवाह नहीं करता - मैं सोच रहा था:
क्या C # /। NET में "खाली अपरिवर्तनीय IEnumerable / IList" सिंगलटन है? (और, भले ही नहीं, क्या ऊपर वर्णित मामले को संभालने का एक "बेहतर" तरीका है?)
जावा के पास Collections.EMPTY_LIST
अपरिवर्तनीय सिंगलटन है - "अच्छी तरह से टाइप किया हुआ" Collections.emptyList<T>()
- जो इस उद्देश्य को पूरा करता है, हालांकि मुझे यकीन नहीं है कि अगर एक समान अवधारणा सी # में भी काम कर सकती है क्योंकि जेनरिक को अलग तरीके से संभाला जाता है।
धन्यवाद।