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 <<<< 中声明为静态的,这可能很重要

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,我在全局对象中的所有其他对象和函数都很好——主要是哈希表,我的代码一直运行,直到我尝试添加这个功能。我会使用哈希表,但我需要密钥不是唯一的;

请问有什么想法吗?

谢谢

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 回答