混淆的C#代码

Fre*_*mas 5 readability

多年前,他们曾经是一场比赛,看谁能制作出最混淆的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#比赛?

Est*_*aya 24

你知道什么难吗?编写其他人可以阅读和维护的代码.任何白痴都可以编写编译并且无法维护的代码.

始终支持可维护性:这就是你找到平衡的方式.

编辑:

"任何傻瓜都可以编写计算机可以理解的代码.优秀的程序员编写人类可以理解的代码."

  • Martin Fowler,Refactoring:改进现有代码的设计

感谢roygbiv找到上述报价.向福勒道歉,谋杀他的言论; 我知道我以前读过它,我只是不记得在哪里.


mqp*_*mqp 6

将所有内容填充到一行并不会使其"混淆" - 它只会让您不必要地滚动.对于那些了解C#的人来说,了解你提出的任何一个例子,如果你使用了行号,那么任何人都不会比其他人更好或更差,这仍然是微不足道的.

  • 是的,OP提供的样本很难称为混淆. (2认同)