在C#中,可以在单个语句中进行赋值和参数传递吗?

时间:2015-01-08 04:13:03

标签: c#

我正在尝试

        string answer = (5 + 6).ToString();
        Console.WriteLine(answer);

我想知道赋值和参数传递是否可以在C#的单个语句中同时发生。编译器不喜欢以下代码。

        Console.WriteLine(string answer = (5 + 6).ToString());

2 个答案:

答案 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()));