在C#中设置列表项而不使用自动setter / getter

时间:2013-09-18 11:35:42

标签: c# list setter getter

我正在尝试在C#中创建手动setter / getter方法,但是我从“set”-line获得以下错误: 错误:'System.Collections.Generic.ListPackage.Add(Package)'的最佳重载方法匹配有一些无效的参数

private List<Package> packages = new List<Package>();    

public List<Package> Packages
{
    set { packages.Add(value); }
    get { return packages; }
}

6 个答案:

答案 0 :(得分:3)

使用getter / setter,输入和输出类型必须相同。(因此声明为public List<Package> Packages { ... - 期望输入List<Packages>和输出List<Packages>

您在此处正在尝试get输入List<Package>set类型Package。这是不允许的。

我认为您想要做的是以下内容:

private List<Package> packages = new List<Package>();    

public List<Package> Packages
{
    // no setter
    get { return packages; }
}

然后致电myObject.Packages以获取所有套餐并添加myObject.Packages.Add(package)

答案 1 :(得分:3)

您的代码应如下所示。

private var packages = new List<Package>();    

public List<Package> Packages
{
    set { packages = value; }
    get { return packages; }
}

如果您尝试使用索引getter / setter进行某种直通:

public int this[int key]
{
    get
    {
        return Packages[key];
    }
    set
    {
        Packages[key] = value;
    }
}

答案 2 :(得分:1)

你做不到。

如果你想设置一个元素你应该......

public void addPackage(Package pack){
    packages.Add(pack);
}

用法:     MyClass m = new MyClass();     m.addPackage(new Package());

如果您尝试设置集合,那么......

public List<Package> Packages
{
    set { packages=value; }
    get { return packages; }
}

用法:

MyClass m= new MyClass();
m.Packages=new List<Package>();

答案 3 :(得分:0)

我觉得你在这里有点混乱。

包的类型List<Package>。当您致电packages.Add(value);时,packages实际上是List<Package>

public List <Package> Packages
{
    get { return packages; }
    set { packages = value; }
}

这会纠正财产。

添加项目:

Packages.Add(myPackage);

答案 4 :(得分:0)

如果您确实要将value List<Package>添加到packages,则应使用

set { packages.AddRange(value); }

否则,

set { packages = value; }

答案 5 :(得分:0)

您正尝试将set{}方法用作Add方法,而不是set方法。 Add用于更改整个集合,而=方法会将项目添加到集合中。其他答案中陈述的内容是正确的...如果您真的希望AddRange()运算符添加到集合而不是分配新集合,您可以使用=但为了清楚起见,您应该如果是这种情况,请覆盖{{1}}运算符。