我想做
string answer = (5 + 6).ToString();
Console.WriteLine(answer);
Run Code Online (Sandbox Code Playgroud)
我想知道赋值和参数传递是否可以在C#的单个语句中同时发生.编译器不喜欢以下代码.
Console.WriteLine(string answer = (5 + 6).ToString());
Run Code Online (Sandbox Code Playgroud)
我想知道赋值和参数传递是否可以在C#的单个语句中同时发生.
他们可以,但变量声明不能.此代码不合法:
Console.WriteLine(string answer = (5 + 6).ToString());
Run Code Online (Sandbox Code Playgroud)
但这段代码是合法的:
string answer;
Console.WriteLine(answer = (5 + 6).ToString());
Run Code Online (Sandbox Code Playgroud)
并且由于分配chainging,它将输出值11.但它可能不是您可以使用的最佳编码风格.首先,我会这样写:
string answer = (5 + 6).ToString();
Console.WriteLine(answer);
Run Code Online (Sandbox Code Playgroud)
将它视为"同时"也不是最佳选择.它们位于相同的C#语句中,但在编译时不会在同一个IL语句中,并且不是原子的.
编辑:没关系,我显然生锈了。查看另一个答案:C#中确实存在赋值表达式,但它们不能包含变量声明。
在 C# 中,赋值是一个语句,而不是一个表达式。非表达式的语句没有值(与 C++ 不同,在 C++ 中,赋值有一个值,即新分配的值)。这主要是为了避免出现诸如 之类的错误if (x=5) ...,因为x=5不能有值,所以该代码将无法构建。
如果您想声明、赋值,然后使用,那么您就很不走运,因为声明不能用作表达式。
如果您只想分配和使用,那么使用带有参数的函数ref就可以解决这个问题。
例子:
T AssignAndGet<T>(ref T variable, T result) {
variable = result;
return result;
}
Run Code Online (Sandbox Code Playgroud)
可以用作:
string x;
Console.WriteLine(AssignAndGet(x, (5+3).ToString()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |