【问题标题】:Using "ref" or "out" in a extension [duplicate]在扩展中使用“ref”或“out”[重复]
【发布时间】:2012-07-18 09:57:56
【问题描述】:

有谁知道解决这个聪明的方法吗?

public static void Invert(this ref bool value)
{
    value = !value;
}

c# 说我不能在扩展中使用“ref”或“out”。但是像 List.Clear() 这样的扩展是存在的。

【问题讨论】:

  • List.Clear() 扩展是什么意思?
  • List<T>.Clear() 不是扩展方法,不接受 refout 参数。你到底在问什么?
  • @TimSchmelter 只是 myBool.Invert();
  • 不,扩展方法的第一个参数不能refout

标签: c# extension-methods


【解决方案1】:

List.Clear() 不是扩展方法,而是一种方法。即使它是一种扩展方法,它也不需要将参数接收为ref,因为它不会“返回”与您拥有的列表不同的列表,它会修改列表。

而且,一般来说,你不能。但你通常不需要。

怎么样:

public static bool Invert(this bool value)
{
    return !value;
}

bool x = false.Invert();

【讨论】:

    【解决方案2】:

    首先,我知道没有List.Clear 扩展方法。 List<T>.Clear() 是一种正常的方法。它没有ref 参数。

    第二个问题是List<T> 是可变引用类型。所以你可以修改它,而不改变引用本身。如果您想更改引用本身,或者您正在处理值类型,则只需要 ref

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2011-02-06
      • 2015-01-06
      • 2010-09-19
      • 1970-01-01
      • 2010-11-24
      相关资源
      最近更新 更多