多年前,他们曾经是一场比赛,看谁能制作出最混淆的C代码,而且有些结果显然难以理解.C就是这样.特别是你可能真的搞砸了预处理器.
但是,C#的许多新功能提供了一个混淆代码的绝佳机会.我想知道是否有人对在代码中的简洁和清晰度之间找到正确的平衡有意见.让我举一个讨论的例子,即将项目填充到ListView中的任务.(是的,我知道你可以用数据绑定来做,但请跟我一起去.)
控件是两列,用一个struct Person {public string name; 公共字符串地址; };
一个清晰简单的方法是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
清晰易懂.
我也可以这样写:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
甚至:
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 }));
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我也可以这样写:
private void Fill(Person[] people)
{
Array.ForEach(people, item =>
listView1.items.Add(new ListViewItem(
new string[] { person.name, person.address}));
}
Run Code Online (Sandbox Code Playgroud)
每个都或多或少地使用该语言的各种新功能.你如何找到简洁和清晰之间的平衡?我们是否应该举行年度混淆C#比赛?
将所有内容填充到一行并不会使其"混淆" - 它只会让您不必要地滚动.对于那些了解C#的人来说,了解你提出的任何一个例子,如果你使用了行号,那么任何人都不会比其他人更好或更差,这仍然是微不足道的.
| 归档时间: |
|
| 查看次数: |
4142 次 |
| 最近记录: |