Получение имени переменной элементов в цикле foreach - PullRequest
0 голосов
/ 26 марта 2020

Можно ли получить имя переменной элемента в foreach l oop? Я пробовал nameof (v), который, кажется, не работает. См. Ниже:

//check for blank answer boxes and set flag for validation
            foreach (string v in new object[] { answer3, answer4, answer5, answer6b, answer11, answer12, answer13b, answer14c, answer18, answer20 })
            {
                if (string.IsNullOrWhiteSpace(v))
                {
                    s1.Flag = true;
                    s1.FlagContent += $"Blank answer box: {nameof(v)}. ";
                }
            }

Например, если answer3 был нулевым или содержал пробел, s1.Flag был бы установлен в true, а s1.FlagContent был бы установлен в "Пустое поле ответа: answer3".

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

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

Типичный способ обработки такого сценария хранить ответы в словаре, а не давать им отдельные переменные. Если вам абсолютно необходимо иметь их в отдельных переменных, вы можете преобразовать их в словарь следующим образом:

var dictionary = new Dictionary<string, string>
{
    { "answer1", answer1 },
    { "answer2", answer2 },
    { "answer3", answer3 },
    { "answer4", answer4 },
    { "answer5", answer5 }
};

Тогда проблема тривиальна:

foreach (var item in dictionary)
{
    if (string.IsNullOrWhiteSpace(item.Value))
    {
        s1.Flag = true;
        s1.FlagContent += $"Blank answer box: {item.Key}.";
    }
}
1 голос
/ 26 марта 2020

используйте словарь:

string answer3 = "bla";
string answer4 = null;
string answer5 = "";
var answers = new Dictionary<string,string>();
answers.Add( nameof(answer3), answer3 );
answers.Add( nameof(answer4), answer4 );
answers.Add( nameof(answer5), answer5 );

foreach( var v in answers )
{
    if (string.IsNullOrWhiteSpace(v.Value))
    {
        s1.Flag = true;
        s1.FlagContent += $"Blank answer box: {v.Key}. ";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...