var1 = var2 = true;优点缺点?

时间:2009-10-21 08:53:22

标签: c#

在声明中使用多个赋值是否有任何优点或缺点?在简单的例子中

var1 = var2 = true;

这个分配是从右到左(我相信C#中的所有分配,可能是Java,虽然我没有检查过后者)。但是这样编码是否有任何影响(编译,执行或其他方面)?

干杯。

10 个答案:

答案 0 :(得分:11)

可读性失败 这真的不需要花费更多的东西

var1 = true;
var2 = true;

var2 = true;
var1 = var2;

答案 1 :(得分:4)

没有任何编译或执行方面的影响,但我个人不会这样做。

使用两个单独的赋值语句更易读/可维护,并且将编译为与单个语句完全相同的IL。

bool var1 = true;
bool var2 = true;

// versus

bool var2;
bool var1 = var2 = true;

// or

bool var1 = true, var2 = true;

答案 2 :(得分:4)

我认为我是唯一一个喜欢它的人...也许不是两个变量,但如果你喜欢5,你只是初始化它们,为什么不呢?可以更轻松地一次更改所有内容。关于var1=true; var2=var1;的这些建议需要更多的思考才能理解。要确定var2实际初始化的内容,您必须查看var1,然后查看分配给它的内容。我认为将它们全部放在一条线上非常清楚。

如果你正在做其他事情而不是初始化它们(执行一些有意义的逻辑)那么最好明确你正在做什么(让它们在不同的行上)。

答案 3 :(得分:2)

如果您将其编写为:

,则人类更容易解析
bool var1 = true;
bool var2 = true;

但在我看来更重要的是,对于需要比较运算符而不是赋值运算符的错误,这是不明确的。最好明确一点。对于var1的值,以下2个块具有相反的结果:

bool var2;
bool var1 = var2 = false;

bool var2;
bool var1 = var2 == false;

答案 4 :(得分:1)

我最近使用了在代码高尔夫中链接分配的功能,目标是尽可能少的字符。

在此之前我不认为我曾经在C#中使用过它,因为它使代码的可读性降低。要理解你必须从右到左阅读它的陈述,那不是你自然地阅读代码的方式。

正如Anders Rune Jensen所提到的,你可能想要强调变量中的值应该是相同的,但是你可以在两个语句中做到这一点,以使它更清晰:

var1 = true;
var2 = var1;

如果实际生成的代码完全不同,那么在正常情况下,性能差异根本不会或太小而无法衡量。

答案 5 :(得分:1)

我每次都要考虑可读性,但确切地说,最具可读性的是意见问题,取决于背景。对于引用的两个变量,我将使用单独的行,如

var1 = true;
var2 = true;

但另一方面,对于更多变量,我通常会使用更长的任务来节省屏幕空间。例如,编码图形对于坐标具有简单的x,y,s和t变量是很常见的。在这种情况下,我会毫不犹豫地选择

x = y = s = t = 0;

因为3行屏幕空间的丢失会影响可读性。坦率地说,虽然简单是首选,如果你不能理解上面的构造,你首先编写的基于C语法的编码是另一个伟大的节省空间,三元构造,将完全打败你。

a =(x == y)? value1:value2;

答案 6 :(得分:1)

以类似的方式,考虑:

var var1, var2;
var1 = var2 = new int[3];
var1 = {1, 1, 1};
var2 = {2, 2, 2};

var1和var2现在指向相同的引用{2,2,2}。

当var1和var2是引用类型(如数组)时,请记住,即使数组的元素是值类型(如int),该数组仍然是引用类型。

答案 7 :(得分:0)

它只是将东西放入一行而不是多行。并且还清楚地表明您实际上希望var1和var2具有相同的值。

var1 = true;
var2 = true;

可能看起来像c / p错误; - )

答案 8 :(得分:0)

这种符号对于“Code-golf”非常有用:)

// 34 symbols
bool var1 = true;
bool var2 = true;

// versus 27 symbols
bool var2;
bool var1=var2=1;

// vs 22 symbols
bool var1,var2=var1=1;

答案 9 :(得分:0)

一组有趣的回复,谢谢。我以为我会总结一下(这是允许的吗?)

我认为,在声明简单变量的初始值时,也许可以接受,但不是许多人的偏好。但大多数人都认为可读性更为重要;他们的偏好是单独的陈述。我的一样。

我刚才做了另一个谷歌,发现有人在.Net 1.1中测试了"Performance and Multiple Assigment in C#"。似乎有一个非常小的打击。看一看。