में पैरामीटर के रूप में कार्य करने के लिए खुद को पास करने के लिए संपत्ति को पास करें, मैं एक समारोह में संपत्ति को पास करने के लिए एक विधि की तलाश में हूं। संपत्ति का मूल्य नहीं है। फ़ंक्शन पहले से नहीं जानता है कि किस प्रकार सॉर्टिंग के लिए संपत्ति का उपयोग किया जाएगा। इस उदाहरण में सबसे आसान तरीका यह है: विभिन्न पैरामीटर प्रकारों के साथ 4 ओवरराइट बनाना। अन्य तरीके फ़ंक्शन के अंदर typeof()
का उपयोग कर रहा है। कक्षा 1 में सैकड़ों गुण होने पर इन दोनों तरीकों को अस्वीकार्य माना जाता है। अब तक मुझे निम्नलिखित विधि मिली:सी #
class Class1
{
string vehName;
int maxSpeed;
int fuelCapacity;
bool isFlying;
}
class Processor
{
List<Class1> vehicles = null;
Processor(List<Class1> input)
{
vehicles = input;
}
List<Class1> sortBy(List<Class1> toSort, string propName)
{
if (toSort != null && toSort.Count > 0)
{
return toSort.OrderBy(x => typeof(Class1).GetProperty(propName).GetValue(x, null)).ToList();
}
else return null;
}
}
class OuterUser
{
List<Class1> vehicles = new List<Class1>();
// ... fill the list
Processor pr = new Processor(vehicles);
List<Class1> sorted = pr.sortBy("maxSpeed");
}
मुझे प्रोसेसिंग फ़ंक्शन में स्ट्रिंग पास करते समय "मानव त्रुटि" के जोखिम के कारण इस विधि को पसंद नहीं है। जब कोड के दूसरे भाग द्वारा स्ट्रिंग उत्पन्न होती है तो यह और भी बदसूरत हो जा रहा है। कृपया, आगे प्रसंस्करण के लिए कार्य करने के लिए कक्षा 1 संपत्ति के उत्तीर्ण करने के लिए और अधिक शानदार तरीका सुझाएं। उपयोग आईएमएचओ के लिए सबसे अच्छा विकल्प होगा (या ऐसा कुछ):
vehicles = sortBy(vehicles, Class1.maxSpeed);
कौन सा नेट संस्करण? – alf
पहली जगह में चुने गए सॉर्टिंग के लिए प्रॉपर्टी का उपयोग कैसे किया जा सकता है? – arootbeer
संस्करण .NET 4.0 –