2012-12-19 4 views
10

मैं है निम्नलिखित कोड है जो मुझे एक पथ के फ़ोल्डर पदानुक्रम युक्त एक Stack देता है:सी # में, क्या सरणी को बिना स्टॉप <T> में लूपिंग के रूपांतरित करने का कोई तरीका है?

var path = @"C:\Folder1\Folder2\Folder3\Folder4\Folder5\FileName.ext"; 

// String array with an element for each level 
var folders = path.Split('\\'); 

var stack = new Stack<string>(); 

foreach(var folder in folders) 
    stack.Push(folder); 

var filename = stack.Pop(); // 'FileName.ext' 
var parent = stack.Pop(); // 'Folder5' 
var grandParent = stack.Pop(); // 'Folder4' 
बस जिज्ञासा से बाहर

, वहाँ एक और अधिक सुरुचिपूर्ण तरीका foreach पाश के बिना एक Stack में folders सरणी परिवर्तित करने के लिए है ? (न के बराबर) की तरह कुछ निम्नलिखित:

var folders = path.Split('\\').Reverse().ToStack(); 

मैं अपने सुझाव के लिए तत्पर हैं!

+1

एक विस्तार विधि बनाएं! – duedl0r

+3

@ duedl0r - इसके लिए पहले से ही एक निर्माता है! –

+0

@JakubKonecki: ठंडा! – duedl0r

उत्तर

21

Stack<T> एक constructor स्वीकार करता है कि IEnumerable<T>

+5

गैर-जेनेरिक संस्करण के रूप में। यह एक 'आईसीओलेक्शन' स्वीकार करता है। –

+0

ग्रेट, धन्यवाद- मैं अपने जीवन के लिए नहीं समझ सकता कि मैंने अन्य अधिभारों को क्यों नहीं देखा ... –

5

आप उपयोग कर सकते हैं

var stack = new Stack(folders); 

नोट है कि यह अभी भी पाशन निष्पादित करता है, यह सिर्फ आप के लिए यह करता है।

संपादित करें: आपका कोड Stack का उपयोग करता है लेकिन आपका शीर्षक Stack<T> के बारे में पूछता है। यह गैर-सामान्य संस्करण है। अपना मन बना: क्या तुम सच में एक ToStack() विधि चाहते हैं पी

+0

ओह क्षमा करें, मैं अपने वास्तविक कोड को पारदर्शी कर रहा था और टाइप param को छोड़ दिया था ... हालांकि यह जानने के लिए उपयोगी है, तो +1। –

3

, आप एक विस्तार विधि बना सकते हैं:

public static class Extensions { 
    public static Stack<T> ToStack(this IEnumerable<T> sequence) { 
     return new Stack<T>(sequence); 
    } 
} 

या, के रूप में दूसरों का उल्लेख किया है, तो आप constructor that accepts an IEnumerable<T> इसके लिए इस्तेमाल कर सकते हैं।
मुझे लगता है कि यह व्यक्तिगत वरीयता का मामला है।

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

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