簡體   English   中英

如何創建一個接受任何對象並為所有屬性返回“名稱:值”對的方法?

[英]How to create a method that takes any object and returns a name:value pair for all properties?

例如我有一個簡單的類

public class Person{ 
    public int Age {get;set;}
    public string Name {get;set;}
}

我需要制作一個方法,該方法可以接受任何類,並以字符串形式“ Age:35; Name:John Doe;”吐出對象中設置的屬性值。

我正在尋找一種方法簽名

public string SpitNameValuePairs<T>() 

或類似的東西。 如果使用反射,如何有效地做到這一點?

這是一個快速實施。

    public static string SplitNameValuePairs(object value)
    {
        string retVal = string.Empty;
        List<string> keyValuePairs = new List<string>();

        foreach (var propInfo in value.GetType().GetProperties())
        {
            keyValuePairs.Add(string.Format("{0}:{1};", propInfo.Name, propInfo.GetValue(value, null).ToString()));
        }

        retVal = string.Join("", keyValuePairs.ToArray());

        return retVal;
    }

然后像這樣調用:

        var person = new Person();
        person.Name = "Hello";
        person.Age = 10;
        Console.WriteLine(SplitNameValuePairs(person));

當屬性定義了索引器並且僅輸出實例屬性(非靜態)時,可以防止崩潰。

    private static string SplitNameValuePairs<T>(T value)
    {
        StringBuilder sb = new StringBuilder();

        foreach (PropertyInfo property in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
        {
            if (property.GetIndexParameters().Length == 0)
                sb.AppendFormat("{0}:{1};", property.Name, property.GetValue(value, null));
        }
        return sb.ToString();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM