2009-06-19 19 views
78

मैं आमतौर पर सरणी सिंटैक्स का उपयोग किसी एकल मान से एक दृश्य बनाने के लिए, इस तरह:पसंदीदा तरीका है?

IEnumerable<string> sequence = new string[] { "abc" }; 

या एक नई सूची का उपयोग कर। मैं सुनना चाहता हूं कि किसी के पास एक ही काम करने का एक और अधिक अभिव्यक्तिपूर्ण तरीका है।

+3

कैसे है कि एक खाली अनुक्रम है? – CoderDennis

उत्तर

121

आपका उदाहरण, एक खाली अनुक्रम नहीं है, यह एक तत्व के साथ एक दृश्य है। तार के एक खाली अनुक्रम आप

var sequence = Enumerable.Empty<string>(); 

संपादित कर सकते हैं बनाने के लिए ओपी स्पष्ट किया वे एक ही मान बनाने के लिए देख रहे थे। उस मामले में

var sequence = Enumerable.Repeat("abc",1); 
+0

डी ओह, मैं विचलित हो गया, क्षमा करें। मेरा मतलब था एक एकल मूल्य से, एक खाली उदाहरण नहीं बनाओ! –

+0

यह 'जवाब' ध्वज है? – n8wrl

+0

यह विधि एक नई सरणी बनाने से अधिक पूरी तरह कार्यात्मक है। –

58

मैं तुम क्या सुझाव है कि पसंद है, लेकिन छोड़े गए सरणी प्रकार के साथ:

var sequence = new[] { "abc" }; 
+4

मुझे कभी एहसास नहीं हुआ कि आप ऐसा कर सकते हैं। मुझे लगता है कि यह दोहराना उपयोग करने से स्पष्ट है। –

+1

याय प्रकार अनुमान। –

+0

लेकिन यह एक आईनेमरेबल नहीं है, यह एक सरणी है! – Zodman

20

या भी कम,

string[] single = { "abc" }; 

मैं एक विस्तार विधि बनाना होगा:

public static T[] Yield<T>(this T item) 
{ 
    T[] single = { item }; 
    return single; 
} 

या और भी बेहतर और छोटे, बस

public static IEnumerable<T> Yield<T>(this T item) 
{ 
    yield return item; 
} 

शायद यह वास्तव में क्या Enumerable.Repeat हुड के नीचे कर रहा है।

+1

आखिरी वाला शानदार है। नाम के अलावा ... यह उन प्रकारों के साथ संघर्ष करेगा जो पहले से ही आपके उदाहरण में स्ट्रिंग जैसे IENumerable को लागू करते हैं। आज़माएं। एसएसलिंग ItemEnumerable(), या बस .Yield() -> "abc" .Yield() – DanO

+0

@DanO आप सही हैं। यह एक अच्छा नाम है .. – nawfal

+6

मुझे लगता है कि ToEnumerable अधिक उपयुक्त है। – Zodman

3

या सिर्फ एक विधि बनाने

public static IEnumerable<T> CreateEnumerable<T>(params T[] items) 
{ 
    if(items == null) 
     yield break; 

    foreach (T mitem in items) 
     yield return mitem; 
} 

या

public static IEnumerable<T> CreateEnumerable<T>(params T[] items) 
{ 
    return items ?? Enumerable.Empty<T>(); 
} 

उपयोग:

IEnumerable<string> items = CreateEnumerable("single"); 
संबंधित मुद्दे