[英]What is the Technical Term for C# inline variable assignment and evaluation?
我最近正在阅读 Github 上的一些代码,我遇到了以下行,
if (((tmp = rx.IndexOf("<")) >= 0) && (rx.IndexOf(">") > tmp ))
特别是
(tmp = rx.IndexOf("<") >= 0)
并在 if 语句的下一部分的同一行中立即使用tmp
变量进行比较
(rx.IndexOf(">") > tmp )
其中一个变量由 string,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());
}
上述代码的output如下。 同样,我了解代码的工作原理,我想知道这在技术上叫什么?
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
这只是赋值是表达式的结果。 它在 C# 规范中定义:
7.17.1 简单赋值
= 运算符称为简单赋值运算符。
简单赋值表达式的结果是赋值给左操作数的值。 结果与左操作数具有相同的类型,并且始终归类为值。
所以价值
tmp = rx.IndexOf("<")
是分配给tmp
的值,即rx.IndexOf("<")
。 然后将该值与外部表达式中的 0 进行比较。
没有“技术术语”。 这是一个赋值,赋值可以作为表达式或语句。 这是一个有价值的陈述; 或者可以忽略结果值的表达式。 (与x+y不同,Result不允许被忽略)与前缀和后缀运算符i++相同; 它看起来不像 x = y = z 这样的行中的“内联”;
但是,它并不经常使用,因为它的可读性较差,正如您刚刚证明的那样。 在您的情况下,分配一个值并在同一表达式树中使用该值高度依赖于定义明确的评估顺序,但谁知道呢?
这种写作风格可以保护您的一行代码(通过延长一行代码),但它永远不会为您节省任何操作,因此不会导致任何性能。
所以阅读它,理解它,但最好不要经常使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.