Есть ли способ объявить новые переменные в al oop, используя строку? - PullRequest
0 голосов
/ 05 апреля 2020

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

var item0 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item0.ToString())).FirstOrDefault().Key;
var item1 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item1.ToString())).FirstOrDefault().Key;
var item2 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item2.ToString())).FirstOrDefault().Key;
var item3 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item3.ToString())).FirstOrDefault().Key;
//...

Я подумал о том, чтобы сделать что-то проще в для l oop, как это

string[] itemsList = new string[7];
for (int j = 0; j < itemsList.Length; j++)
    {
        string nextItem = $"Item{j}";
        itemsList[j] = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.nextItem.ToString())).FirstOrDefault().Key; //problem is here
    }

Но c# не понимает, что я пытаюсь использовать строку nextItem. Есть ли способ, которым я могу использовать строку, чтобы определить, какой элемент я хочу?

1 Ответ

1 голос
/ 05 апреля 2020

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

string[] itemsList = new string[7];
var stats = matches[i].Participants[participantNum].stats;
for (int j = 0; j < itemsList.Length; j++)
{
    var nextItem = stats.GetType().GetProperty($"item{j}").GetValue(stats).ToString();
    var v = items.Data.Where(p => p.Key.Equals(nextItem)).FirstOrDefault(); //problem is here
    itemsList[j] = (v != null)?v.Key:"";
}

PS: Возможно, в вашей модели вы должны определить элементы списка для более легкой манипуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...