【问题标题】:Purpose of "in" parameters in C#C# 中“in”参数的用途
【发布时间】: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;
}

我不明白这些参数是通过引用传递的(如refout)。

我不明白的是in 参数的用途。使用它们我能得到什么?
我了解outref 参数的用途,能够为调用范围内的变量赋值非常有用,但是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


【解决方案1】:

"in" 可用于将变量作为只读引用(值类型和引用类型两者)传递。 传递只读引用的原因是,如果我传递一个没有引用的值类型变量,那么每次都会创建一个新副本。因此,它将需要额外的内存并且性能会变慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2020-12-20
    • 2020-11-08
    相关资源
    最近更新 更多