Что это значит под "label = (Label) tableLayoutPanel.Controls [i];"? - PullRequest
0 голосов
/ 04 апреля 2019

Это частичный код интеллектуальной игры в форме Windows.У меня вопрос, почему я должен установить «Метку» tableLayoutPanel1.Controls в метку локальной переменной?Также, почему это помещено в условие if?

Label label;
int randomNumber;
for (int i = 0; i < tableLayoutPanel1.Controls.Count; i++)
{
    if (tableLayoutPanel1.Controls[i] is Label)
       label = (Label)tableLayoutPanel1.Controls[i];
    else
       continue;
}

1 Ответ

0 голосов
/ 04 апреля 2019

Короткий ответ : (Label) - это явное преобразование типа и if с is -оператором , чтобы сделать его безопасным.

Более длинный ответ : Здесь приведена закомментированная и очищенная версия вашего кода (удалены ненужные переменная randomNumber и else -ответ:

// Declare variable label, which has type Label. It's value is null here.
Label label;
// Loop as many rounds than there are items in tableLayoutPanel1.Controls - collection
for (int i = 0; i < tableLayoutPanel1.Controls.Count; i++)
{
    // When looping, i has value 0,1,2,3 depending on for loop round
    // Check if tableLayoutPanel1.Controls-collection has item at position i
    // which has type compatible with Label. C# operator "is" is used.
    if (tableLayoutPanel1.Controls[i] is Label)
    {  
       // It is safe to make explicit type conversion to Label 
       // and set reference to label-variable
       label = (Label)tableLayoutPanel1.Controls[i];
    }
}

Результатом фрагмента является то, что переменная метки имеет ссылку на последний элемент в tableLayoutPanel1.Controls-collection, тип которого совместим с Label.

...