1

まず、単純化しすぎて申し訳ありませんが、私はこの問題に頭がおかしくなっています。それはうまくいくはずです-それは単純なコードであり、空想は何もありません........

私はこのオブジェクトを持っています

public class Stuff
{
    private int intStuff;
    private string strStuff;

    public Stuff(int StuffID, string Stuff)
    {
        intStuff = StuffID;
        strStuff = Stuff;
    }

    public int StuffID
    {
        get { return intStuff; }
        set { intStuff = value; }
    }

    public string Stuff
    {
        get{return strStuff;}
        set{strStuff=value;}
    }

}

このクラスで使用されるもの:

public class StuffandThings
{

    private List<Stuff> lstMyStuff;   

    public List<Stuff> StuffList
    {
        set { lstMyStuff = value; }
        get { return lstMyStuff; }
    }

    public StuffandThings()
    {
        lstMyStuff = new List<Stuff>();
    }
}

Global.asax で static として宣言されているもの <<<< これは重要かもしれません

public static StuffAndThings MyStuff;

protected void Application_Start(object sender, EventArgs e)
{
        MyStuff = new StuffandThings();
}

コードで使用すると、次のようになります。

foreach (string strStuff in lstStuff)
{
    objStuff = new Stuff(intStuff,strStuff);
    Global.MyStuff.StuffList.Add(objStuff);
}

コンパイルされ、デバッグで実行できます (これは WCF Web サービスです)。変数 (intStuff と lstStuff) はすべて有効ですが、ブラウザーで Service.svc をクリックすると、次のエラーが表示されます。

CS1502: 'System.Collections.Generic.List.Add(Stuff)' に最適なオーバーロードされたメソッドに無効な引数が含まれています

私はこれで木のための木を見ることができないと思うし、インターウェブは役に立たなかった.

Aso、グローバル オブジェクト内の他のすべてのオブジェクトと関数は問題ありません。ほとんどの場合、ハッシュテーブルであり、この機能を追加しようとするまでコードが実行されました。ハッシュテーブルを使用しますが、キーが一意でないようにする必要があります。

何かアイデアはありますか?

ありがとう

P

4

1 に答える 1

1

ループ内で objStuff の型を宣言する必要があります。可能な限り最小のスコープ内で常に変数を宣言します。

Stuff objStuff = new Stuff(intStuff,strStuff);
Global.MyStuff.StuffList.Add(objStuff);

objStuff が親スコープで既に使用されているためにコンパイルに失敗した場合は、新しい名前 (たとえば objStuff2) を見つければ、すべてが機能するはずです。

objStuff はコードのどこで宣言されていますか? たまたま objStuff と呼ばれているものの、実際には関係のない別の宣言を取り上げている可能性があります。

于 2010-01-15T22:32:47.367 に答える