-1

誰かがこれを賢く解決する方法を知っていますか?

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

c# は、拡張機能内で「ref」または「out」を使用できないと言っています。しかし、List.Clear() のような拡張機能は存在します。

4

2 に答える 2

7

List.Clear()拡張メソッドではなく、メソッドです。また、それが拡張メソッドであったとしても、パラメーターを as として受け取る必要はありrefません。これは、持っていたものとは異なるリストを「返さない」ため、リストを変更します。

そして、一般的にはできません。しかし、通常は必要ありません。

どうですか:

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

bool x = false.Invert();
于 2012-07-18T10:01:58.367 に答える
4

まず、List.Clear拡張メソッドがないことを知っています。List<T>.Clear()が通常の方法です。refパラメータはありません。

2 つ目の問題はList<T>、可変参照型であることです。したがって、参照自体を変更せずに変更できます。ref参照自体を変更する場合、または値の型で作業している場合にのみ必要です。

于 2012-07-18T10:01:34.247 に答える