Использование конкатенации со строками и частичными именами объектов в C#

Я ищу способ получить имя объекта через идентификатор, для которого он был установлен.
Первая часть имени всегда одинакова, например. "Рейтинг", а затем я хотел бы объединить его с текущим значением целого числа, например. "Rating" + i,
Есть ли способ объединить частичные имена объектов и переменные для создания имени объекта, или это просто случай итерации по массиву?

2 ответа

Решение

Предполагая, что имя объекта означает имя класса, вы можете сделать что-то вроде этого:

var typeName = this.GetType().Name;

for (int i = 0; i < 5; i++)
{
    Debug.WriteLine(String.Format("{0}{1}", typeName, i));
}

Естественно, вам нужно изменить код в соответствии с вашими потребностями, но для класса с именем Test, это напечатало бы это к окну вывода Отладки

Test0
Test1
Test2
Test3
Test4

Как правило, для проецирования коллекции объектов вы должны использовать LINQ или, более конкретно, IEnumerable.Select, В этом случае вы проецируете int (Id свойство типа int) в stringИтак, общий метод:

public static IEnumerable<string> GetNamesFromIds(IEnumerable<int> ids)
{
    return ids.Select(i => "Rating" + i);
}

Итак, предположим, что такой класс:

public class Rating 
{
    public int Id { get; set; }
}

Вы можете просто использовать:

// get the list of ratings from somewhere
var ratings = new List<Rating>(); 

// project each Rating object into an int by selecting the Id property
var ids = ratings.Select(r => r.Id);

// project each int value into a string using the method above
var names = GetNamesFromIds(ids);

Или вообще любой IEnumerable<int> будет работать так же:

// get ids from a list of ratings
names = GetNamesFromIds(ratings.Select(r => r.Id));

// get ids from an array
names = GetNamesFromIds(new [] { 1, 2, 3, 4, 5});

// get ids from Enumerable.Range
names = GetNamesFromIds(Enumerable.Range(1, 5));
Другие вопросы по тегам