Несколько лет назад они были соревнованием, чтобы увидеть, кто может создать самый запутанный код C, и некоторые результаты были совершенно нечитаемыми. С было так. В частности, вы можете все испортить, особенно с препроцессором.
Однако многие из новых функций C # предлагают удивительную возможность запутать код. Мне было интересно, есть ли у кого-нибудь мнение о том, как найти правильный баланс между краткостью и ясностью кода. Позвольте мне предложить один пример для обсуждения - задачу заполнения элементов в ListView. (Да, я знаю, что вы можете сделать это с привязкой данных, но идите со мной здесь.)
Элемент управления состоит из двух столбцов, которые должны быть заполнены массивом
структура Person
{
публичное имя строки;
публичный строковый адрес;
}; * +1005 *
Один, ясный и простой способ заключается в следующем:
private void Fill(Person[] people)
{
foreach(Person person in people)
{
string[] columns = new string[2];
columns[0] = person.name;
columns[1] = person.address;
ListViewItem item = new ListViewItem(columns);
listView1.items.Add(item);
}
}
Ясно и просто для понимания.
Я также мог бы написать это так:
private void Fill(Person[] people)
{
foreach(Person person in people)
{
string[] columns = new string[] { person.name, person.address };
ListViewItem item = new ListViewItem(columns);
listView1.items.Add(item);
}
}
или даже:
private void Fill(Person[] people)
{
foreach(var person in people) // Note use implicit typing here
{
listView1.items.Add(new ListViewItem(
new string[] { person.name, person.address }));
}
}
Наконец, я мог бы написать это так:
private void Fill(Person[] people)
{
Array.ForEach(people, item =>
listView1.items.Add(new ListViewItem(
new string[] { person.name, person.address}));
}
Каждый использует различные новые функции языка в большей или меньшей степени. Как вы находите баланс между краткостью и ясностью? Должны ли мы проводить ежегодный конкурс «Обфусцированный С #»?