任何人都知道解决这个问题的方法吗?
public static void Invert(this ref bool value)
{
value = !value;
}
c#表示我不能在扩展名中使用“ref”或“out”。但是像List.Clear()这样的扩展存在。
答案 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
。