Я ищу способ получить имя объекта с помощью идентификатора, к которому он был установлен.
Первая часть названия всегда одна и та же, например. «Рейтинг», а затем я хотел бы объединить его с текущим значением целочисленного числа, например. "Rating" + i
.
Есть ли способ объединить имена и переменные частичных объектов для создания имени объекта или это просто случай итерации через массив?Использование конкатенации со строками и именами частичных объектов в C#
ответ
Предполагая, что имя объекта означает имя класса, вы могли бы сделать что-то вроде этого:
Естественно, вы должны изменить код, чтобы удовлетворить ваши потребности, но для класса с именем Test
, что напечатает к выходному Debug окна
Test0
Test1
Test2
Test3
Test4
это, кажется, правильный метод, но может ли он быть реализован вместе с '
Вы имеете в виду, когда у вас есть экземпляр вашего класса (например, объект «Рейтинг») или без экземпляр доступного объекта? – Joeb454
с экземпляром, доступным/созданным, например. lblCounter1.Text, доступ к которому осуществляется через ("lblCounter" + i) .Text? – matt
Вообще, проецировать коллекцию объектов, можно использовать 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));
Необходимо указать контекст/пример, поскольку я не думаю, что он ясно, что у вас есть и что вы хотите получить. –
Вы можете использовать Linq, но в нижней строке он все равно будет перебирать элементы списка/массива. – Amorphis