C# 内联变量赋值和计算的技术术语是什么?



我最近在Github上阅读了一些代码,我遇到了以下行,

if (((tmp = rx.IndexOf("<")) >= 0) && (rx.IndexOf(">") > tmp ))

特别是

(tmp = rx.IndexOf("<") >= 0) 

并在 if 语句下一部分同一行的比较中立即使用tmp变量

(rx.IndexOf(">") > tmp )

其中变量由字符串 indexOf(( 方法设置,然后使用大于或等于等于相等运算符计算"赋值语句本身"。

起初我认为这是一个错字,但在通过一个简单的控制台应用程序评估代码时,我发现它是有效的,并且是一个很好的捷径。

问题是"这个技术术语是什么?"因为我在各种 C# 帮助站点中找不到任何解释。

演示如何使用语句的示例控制台应用。

public static void Main()
{
// first test - the actual code I found in gitHub 
int tmp;
int tmp2;
string rx = "  < test>";
// the below line is the subject of the question.

if (((tmp = rx.IndexOf("<")) >= 0) && (rx.IndexOf(">") > tmp )){ 
Console.WriteLine("The Close brace is after the opening brace!");
}
// additional test 
int r;
Console.WriteLine(r = 25 + 3);
Console.WriteLine(r);

// and another 
int w = -1;
Console.WriteLine(" The index of '<' is greater than 0 : " + _
((w = rx.IndexOf("<")) > 0).ToString() + _ 
" and the value of w is " + w.ToString()); 
}

上述代码的输出如下。 再次,我了解代码有效,我想知道这在技术上叫什么?

The Close brace is after the opening brace!
28
28
The index of '<' is greater than 0 : True and the value of w is 2

没有"技术术语"。 这是一个赋值,赋值可以充当表达式或语句。 这是一个具有价值的语句;或者可以忽略结果值的表达式。(与 x+y 不同,结果不允许被忽略( 它与前缀和后缀运算符 i++ 相同; 它看起来不太像 x = y = z 这样的行中的"内联";

但是,它不经常使用,因为它的可读性较差,正如您刚刚证明的那样。 在您的情况下,分配一个值并在同一表达式树中使用该值 高度依赖于评估顺序,这是明确定义的,但谁知道它?

这种写作风格将保护您一行代码(通过延长一行( 但它永远不会为您节省任何操作,因此不会造成任何性能。

所以阅读它,理解它,但最好不要频繁使用它。

这只是赋值是表达式的结果。它在 C# 规范中定义:

7.17.1 简单赋值

= 运算符称为简单赋值运算符。

简单赋值表达式的结果是赋值 左操作数。结果与左操作数的类型相同,并且 始终分类为值。

所以价值

tmp = rx.IndexOf("<")

是分配给tmp的值,即rx.IndexOf("<")。然后将此值与外部表达式中的 0 进行比较。

最新更新