Использование конкатенации со строками и частичными именами объектов в 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));