Как создать метод, который принимает любой объект и возвращает пару имя: значение для всех свойств? - PullRequest
0 голосов
/ 14 января 2009

Например, у меня есть простой класс, такой как

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

Мне нужно создать метод, который принимает любой класс и выводит значения свойств, заданных в объекте, в виде строки в формате «Возраст: 35; Имя: Джон Доу;»

Я ищу сигнатуру метода в строках

public string SpitNameValuePairs<T>() 

или что-то в этом роде. Как это можно сделать эффективно, если использовать отражение?

Ответы [ 2 ]

2 голосов
/ 14 января 2009

Вот быстрая реализация.

    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));
1 голос
/ 14 января 2009

Имеют защиту от сбоев, когда для свойства определен индексатор, а также выводятся только свойства экземпляра (без статики).

    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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...