【问题标题】:Cannot Add to generic list无法添加到通用列表
【发布时间】:2010-01-15 22:26:49
【问题描述】:

首先我为过于简单化表示歉意,但我有这个问题让我发疯。它应该可以工作 - 它是简单的代码,没什么花哨的......

我有这个东西

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

有什么想法吗?

谢谢

P

【问题讨论】:

  • 能贴出声明objStuff的部分吗?
  • 这些静态对象是线程代码的噩梦,其中包括 WCF。我认为如果您使用这种设计,您很快就会发现列表损坏。

标签: c# list generics generic-list


【解决方案1】:

您应该在循环内声明 objStuff 的类型。始终在尽可能小的范围内声明变量:

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

如果由于 objStuff 已在父作用域中使用而导致编译失败,则找到一个新名称 - 例如 objStuff2,那么一切都应该正常。

objStuff 在你的代码中声明在哪里?您可能会选择其他东西的声明,它也恰好称为 objStuff 但实际上是不相关的。

【讨论】:

  • 谢谢 - 我将完整的声明添加到循环中的唯一名称中,它没有任何区别 - 但是,我会强调遵守这条规则。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多