【发布时间】:2019-01-15 12:28:29
【问题描述】:
C# 7.2 为方法引入了in 参数。我了解它们的工作原理:
int MyMethod(in int i) {
i += 1; // illegal, i is read-only
return i + 1;
}
我不明白这些参数是通过引用传递的(如ref 和out)。
我不明白的是in 参数的用途。使用它们我能得到什么?
我了解out 和ref 参数的用途,能够为调用范围内的变量赋值非常有用,但是in 参数不存在该函数。
【问题讨论】:
-
参见docs.microsoft.com/en-US/dotnet/csharp/programming-guide/…:“要通过引用传递以避免复制但不更改值,请使用 in 修饰符。”
-
也相关:blogs.msdn.microsoft.com/mazhou/2018/01/08/…。它作为
readonly ref参数工作(不能在方法体内重新分配)。 -
@MackThax:使用 int (或任何原始值类型)是一个有点糟糕的例子。但是,如果您有更复杂的值类型/结构,则通过引用传递可以避免复制它。然后
in额外提供了一个安全防护,以防止意外更改原始结构。对于int,唯一的好处是避免意外更改它,但就像您建议的那样,您不会从原始类型中获得太多收益。 -
是的,
in只为(大)结构提供实际好处,因为在我想 99% 的情况下,您想要通过引用传递原始值类型是您想要更改传递变量本身,这对于in是不可能的。
标签: c# language-design c#-7.2