在扩展名中使用“ref”或“out”

时间:2012-07-18 09:57:56

标签: c# extension-methods

任何人都知道解决这个问题的方法吗?

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

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

2 个答案:

答案 0 :(得分:7)

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

而且,一般情况下,你不能。但是你通常不需要。

怎么样:

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

bool x = false.Invert();

答案 1 :(得分:4)

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

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