1

私のクラスには次のコードがあります。

    public string StrLog {get; set;}

次に、同じクラス内に、次のコードがあります。

    private string imgData = StrLog;

次のエラーメッセージが表示されます。

    A field initializer cannot reference the non-static field, method or property

次の問題があります。

    private string imgData = StrLog;

しかし、これを解決する方法がわかりません。

4

3 に答える 3

3

基本的に、他のクラス レベル値を使用してクラス レベル変数を初期化することはできません (その値が静的でない限り)。これは、エラーが伝えようとしていることです。

最良のオプションは、コンストラクターで値を割り当てることです。

private string imgData = null;

public MyClass()
{
   imgData = "some value";
}

あなたの場合、そもそも値がないStrLogため、値を割り当てる意味はStrLogありません。nullしたがって、それを割り当てるか、実際の値フォームを別の場所に割り当てることもできます(私の例のように)

于 2012-11-30T16:57:32.933 に答える
1

非静的メンバーを使用してメンバー変数を初期化することは許可されていません。

コンストラクターで設定して、最初に初期化する必要があります。

例えば:

imgData = null;

コンストラクターで何か(何かがnullになる可能性があります)を割り当てることを強くお勧めします。いい形です。以下の例では、それが重要である理由がわかります。getが最初に実行され、値が設定されていない場合はどうなりますか?少なくともnull値が含まれている必要があります。

そうは言っても、imgDataの値に公開プロパティの値を入力する場合は、次のことを行う必要があります。

public string StrLog
{
   get { return imgData; }
   set { imgData = value; }
}

これにより、StrLogの値がimgDataに渡され、作業は必要ありません。

于 2012-11-30T17:00:41.870 に答える
-1

Strlog と同じように、imgData をプロパティにします。を割り当てます。それが動作します。

于 2012-11-30T17:07:25.910 に答える