मेरे पास एक ऐसा कार्य सेटअप है जो दृढ़ता से टाइप नहीं किया गया है और प्रतिबिंब पर निर्भर करता है।लैम्ब्डा अभिव्यक्ति एक संपत्ति के रूप में
मैं एक वर्ग है, कहते हैं कि
class Person{
public string FirstName {get ; set;}
public string LastName {get; set;}
public int Age {get; set;}
...
// some more public properties
}
और
class CellInfo {
public string Title {get; set;}
public string FormatString {get; set;}
}
और मैं इस
Dictionary<string, CellInfo> fields = new Dictionary<string, CellInfo>();
fields.Add("FirstName", new CellInfo {Title = "First Name", FormatString = "Foo"});
fields.Add("LastName", new CellInfo {Title = "Last Name", FormatString = "Bar"});
यह संपत्ति के नाम के साथ एक सरल शब्दकोश और के बारे में कुछ जानकारी है? जैसी शब्दकोश है उन्हें। मैं एक मॉड्यूल है कि व्यक्ति उदाहरणों प्रक्रियाओं के लिए शब्दकोश गुजरती हैं और मैं
Dictionary<string, CellInfo> fields = SomeMethodToGetDictionary();
foreach(Person p in someCollection)
{
foreach(var field in fields)
{
object cellValue = type(Person).GetProperty(field.Key).GetValue(p, null);
// use cellValue and info on field from field.Value somewhere.
...
}
}
फ़ील्ड नाम के लिए स्ट्रिंग गुजर और प्रतिबिंब का उपयोग करने का यह तरीका काम करता है, लेकिन अगर कोई ऐसा करने का एक जोरदार टाइप तरीका है मैं सोच रहा था इस।
क्या मैं मन में था इस
fields.Add("FirstName", new CellInfo
{
Title = "First Name",
FormatString = "Foo",
EvalExpression = p => p.FirstName
});
की तरह और उपयोग के दौरान एक संपत्ति है कि एक LINQ अभिव्यक्ति संग्रहीत, कुछ हो रही थी, किसी तरह एक व्यक्ति वस्तु पर EvalExpression
का उपयोग करें और संपत्ति के मूल्य मिलता है। मेरे पास कोई सुराग नहीं है कि कहां से शुरू किया जाए या सिंटैक्स इस तरह की संपत्ति की तरह होगा, जो मूल्यांकन योग्य है। मैं प्रतिनिधि प्रतिनिधियों और अभिव्यक्ति पेड़ों के लिए नया हूं कि मुझे खोजने के लिए सही कीवर्ड भी नहीं पता हैं। आशा है कि मेरा विवरण स्पष्ट है; यदि नहीं, तो मुझे बताएं और मैं आवश्यकतानुसार विवरण दूंगा। किसी भी सहायता की बहुत सराहना की जाएगी।
किसी को भी ग परवाह करता है ओममेंट क्यों डाउनवोट? – Aliostad
यह पहली पंक्ति पर आदेश (अनुरोध के विपरीत) हो सकता है। – MikeKulls