क्या कोई ऐसा फ़ंक्शन में नाम प्रदान करने का कोई तरीका है जो उस नाम के साथ किसी दिए गए ऑब्जेक्ट पर फ़ील्ड या प्रॉपर्टी का मान देता है? मैंने नल-कोलेसे ऑपरेटर के साथ इसके आसपास काम करने की कोशिश की, लेकिन स्पष्ट रूप से यह अलग-अलग प्रकारों को पसंद नहीं करता है (जो मेरे लिए थोड़ा अजीब भी है क्योंकि शून्य शून्य है)। अगर मैं इसे नल में अलग कर सकता हूं, लेकिन ऐसा करने का एक बेहतर तरीका होना चाहिए। यहां मेरा कार्य है, और Comparison
ऑब्जेक्ट्स वाली दो पंक्तियां संकलित नहीं होती हैं, लेकिन मैं उन्हें वहां दिखाने के लिए वहां छोड़ दूंगा जो मैं करने की कोशिश कर रहा हूं।सी # प्रतिबिंब नाम से क्षेत्र या संपत्ति प्राप्त करें
private void SortByMemberName<T>(List<T> list, string memberName, bool ascending)
{
Type type = typeof (T);
MemberInfo info = type.GetField(memberName) ?? type.GetProperty(memberName);
if (info == null)
{
throw new Exception("Member name supplied is neither a field nor property of type " + type.FullName);
}
Comparison<T> asc = (t1, t2) => ((IComparable) info.GetValue(t1)).CompareTo(info.GetValue(t2));
Comparison<T> desc = (t1, t2) => ((IComparable) info.GetValue(t2)).CompareTo(info.GetValue(t1));
list.Sort(ascending ? asc : desc);
}
मैंने गतिशील लिनक नामक कुछ के बारे में सुना है जिसका उपयोग किया जा सकता है, लेकिन सीखने के लिए, मैं इसे अपना रास्ता कर रहा हूं।
शून्य coalescing ऑपरेटर काम नहीं करता है क्योंकि 'FieldInfo'' PropertyInfo' नहीं है। उन्हें कास्ट करने के लिए 'as'' का प्रयोग करें। – FlyingStreudel