c# - कक्षा के गुणों की सूची कैसे प्राप्त करें?




.net reflection (6)

@ मार्कग्रावेल के उत्तर के आधार पर, यहां एक संस्करण है जो यूनिटी सी # में काम करता है।

ObjectsClass foo = this;
foreach(var prop in foo.GetType().GetProperties()) {
    Debug.Log("{0}={1}, " + prop.Name + ", " + prop.GetValue(foo, null));
}

मैं कक्षा के सभी गुणों की सूची कैसे प्राप्त करूं?


@lucasjones उत्तर में सुधार हुआ है। मैंने उनके जवाब के बाद टिप्पणी खंड में उल्लिखित सुधारों को शामिल किया। मुझे आशा है कि किसी को यह उपयोगी लगेगा।

public static string[] GetTypePropertyNames(object classObject,  BindingFlags bindingFlags)
{
    if (classObject == null)
    {
        throw new ArgumentNullException(nameof(classObject));
    }

        var type = classObject.GetType();
        var propertyInfos = type.GetProperties(bindingFlags);

        return propertyInfos.Select(propertyInfo => propertyInfo.Name).ToArray();
 }

आप ऐसा करने के लिए प्रतिबिंब का उपयोग कर सकते हैं: (मेरी लाइब्रेरी से - यह नाम और मान प्राप्त करता है)

public static Dictionary<string, object> DictionaryFromType(object atype)
    {
        if (atype == null) return new Dictionary<string, object>();
        Type t = atype.GetType();
        PropertyInfo[] props = t.GetProperties();
        Dictionary<string, object> dict = new Dictionary<string, object>();
        foreach (PropertyInfo prp in props)
        {
            object value = prp.GetValue(atype, new object[]{});
            dict.Add(prp.Name, value);
        }
        return dict;
    }

यह बात इंडेक्स वाले गुणों के लिए काम नहीं करेगी - इसके लिए (यह अनावश्यक हो रही है):

public static Dictionary<string, object> DictionaryFromType(object atype, 
     Dictionary<string, object[]> indexers)
{
     /* replace GetValue() call above with: */
     object value = prp.GetValue(atype, ((indexers.ContainsKey(prp.Name)?indexers[prp.Name]:new string[]{});
}

साथ ही, केवल सार्वजनिक गुण प्राप्त करने के लिए: ( बाध्यकारीफ्लैग एनम पर एमएसडीएन देखें )

/* replace */
PropertyInfo[] props = t.GetProperties();
/* with */
PropertyInfo[] props = t.GetProperties(BindingFlags.Public)

यह अनाम प्रकारों पर भी काम करता है!
नाम पाने के लिए:

public static string[] PropertiesFromType(object atype)
    {
        if (atype == null) return new string[] {};
        Type t = atype.GetType();
        PropertyInfo[] props = t.GetProperties();
        List<string> propNames = new List<string>();
        foreach (PropertyInfo prp in props)
        {
            propNames.Add(prp.Name);
        }
        return propNames.ToArray();
    }

और यह केवल मूल्यों के लिए समान है, या आप इसका उपयोग कर सकते हैं:

 GetDictionaryFromType().Keys
 // or
 GetDictionaryFromType().Values

लेकिन यह थोड़ा धीमा है, मैं कल्पना करता हूँ।


आप प्रतिबिंब का उपयोग कर सकते हैं।

Type typeOfMyObject = myObject.GetType();
PropertyInfo[] properties =typeOfMyObject.GetProperties();

मुझे इस तरह की आवश्यकता का भी सामना करना पड़ रहा है।

इस चर्चा से मुझे एक और विचार मिला,

Obj.GetType().GetProperties()[0].Name

यह संपत्ति का नाम भी दिखा रहा है।

Obj.GetType().GetProperties().Count();

यह गुणों की संख्या दिखा रहा है।

सभी को धन्यवाद। यह अच्छी चर्चा है।


यह मेरा समाधान है

public class MyObject
{
    public string value1 { get; set; }
    public string value2 { get; set; }

    public PropertyInfo[] GetProperties()
    {
        try
        {
            return this.GetType().GetProperties();
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }

    public PropertyInfo GetByParameterName(string ParameterName)
    {
        try
        {
            return this.GetType().GetProperties().FirstOrDefault(x => x.Name == ParameterName);
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }

    public static MyObject SetValue(MyObject obj, string parameterName,object parameterValue)
    {
        try
        {
            obj.GetType().GetProperties().FirstOrDefault(x => x.Name == parameterName).SetValue(obj, parameterValue);
            return obj;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}





properties