10

以下のようにC#で配列のサイズを変更しようとしていますが、

Array.Resize(ref Globals.NameList, 0);

以下のエラーが表示されます

A property or indexer may not be passed as an out or ref parameter

グローバルはオブジェクトです。NameList は、Globals クラスで宣言された文字列型の配列です。

正しいコードを投稿して、これを修正するのを手伝ってください。

ありがとう!

4

3 に答える 3

27

変数を使用しますが、プロパティは使用しません

var obj = Globals.NameList;
Array.Resize(ref obj , 0);
Globals.NameList=obj;
于 2012-08-01T12:22:37.463 に答える
9

コンパイラ エラーはそれ自体を物語っています。参照によってプロパティを渡すことはできません。変数のみ。

C# 仕様セクション 10.6.1.2 から:

仮パラメーターが参照パラメーターの場合、メソッド呼び出しの対応する引数は、キーワードとrefそれに続く仮パラメーターと同じ型の変数参照(セクション 5.3.3) で構成される必要があります。

プロパティ アクセス式はvariable-referenceとしてカウントされません。

あなたはおそらく欲しい:

var tmp = Globals.NameList;
Array.Reize(ref tmp, 0);
Globals.NameList = tmp;

VBでは参照によるプロパティの受け渡しが許可されていますが、上記のように動作することに注意してください。特に、メソッド内の各割り当ては、関連するセッターへの呼び出しではなく、一時的な値にのみ影響します。

Globalsまた、変更可能なパブリック プロパティで呼び出されるクラスを持つことは、デザインの匂いがすることに注意してください...

于 2012-08-01T12:23:40.550 に答える
0

行う

Array arr = Globals.NameList;
Array.Resize(ref arr, 0);
Globals.NameList = arr;
于 2012-08-01T12:24:42.453 に答える