我正在尝试
string answer = (5 + 6).ToString();
Console.WriteLine(answer);
我想知道赋值和参数传递是否可以在C#的单个语句中同时发生。编译器不喜欢以下代码。
Console.WriteLine(string answer = (5 + 6).ToString());
答案 0 :(得分:8)
我想知道赋值和参数传递是否可以在C#的单个语句中同时发生。
他们可以,但变量声明不能。此代码不合法:
Console.WriteLine(string answer = (5 + 6).ToString());
但这段代码是合法的:
string answer;
Console.WriteLine(answer = (5 + 6).ToString());
感谢分配chainging,它将输出值11
。但它可能不是您可以使用的最佳编码风格。如果愿意,我会这样写:
string answer = (5 + 6).ToString();
Console.WriteLine(answer);
将它视为“同时”也不是最佳选择。它们位于相同的C#语句中,但在编译时不会出现在同一个IL语句中,并且不是原子的。
答案 1 :(得分:4)
编辑:没关系,我生气了。看看另一个答案:赋值表达式确实存在于C#中,但它们不能包含变量声明。
在C#中,赋值是一个语句而不是表达式。不是表达式的语句没有值(与C ++不同,其中赋值具有值,即新分配的值)。这主要是为了更喜欢if (x=5) ...
之类的错误,因为x=5
不能有值,这段代码将无法构建。
如果您想要声明,指定,然后使用,那么您的运气肯定不好,因为声明无法使用作为表达。
如果您只想指定和使用,那么使用带有ref
参数的函数可以处理它。
示例:
T AssignAndGet<T>(ref T variable, T result) {
variable = result;
return result;
}
可以用作:
string x;
Console.WriteLine(AssignAndGet(x, (5+3).ToString()));