2010-01-15 67 views
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)是当我点击服务的所有valid.but .svc在浏览器中出现以下错误。

CS1502:为了获得最佳重载方法匹配“System.Collections.Generic.List.Add(东西)”有一些无效参数

我不认为我能看到木材与树木这一个和interwebs一直没有帮助。

麻生太郎,在全局对象我的所有其他对象和功能都很好 - 哈希表居多,而我的代码跑,直到我试图添加此功能。我会使用散列表,但我需要的关键不是唯一的;

有什么想法吗?

感谢

P

+2

你可以发布声明objStuff的地方吗? – 2010-01-15 22:43:39

+0

对于包含WCF的线程代码,这些静态对象是**梦魇**。如果你使用这种设计,我认为你会发现你很快就会得到清单腐败。 – 2010-01-15 23:17:17

回答

1

你应该申报objStuff的循环内的类型。 objStuff2例如,那么一切都应该工作 - 如果无法编译,因为objStuff已经在父范围内使用,然后找到一个新的名字

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

:永远声明你可以在最小的范围内的变量。

在您的代码中声明了objStuff在哪里?你可能正在拾取其他东西的声明,这也正好被称为objStuff,但实际上并不相关。

+0

谢谢你 - 我在循环中添加了完整的声明给一个独特的名字,并没有什么区别 - 然而,我会遵循这条规则。 再次感谢 – Peter 2010-01-15 23:07:30