2

我正在尝试在 C# 中创建手动 setter/getter 方法,但我从“set”行收到以下错误:错误:'System.Collections.Generic.ListPackage.Add( Package)' 有一些无效的参数

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

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

6 回答 6

6

您的代码应如下所示。

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;
    }
}
于 2013-09-18T11:37:46.090 回答
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)添加。

于 2013-09-18T11:37:23.083 回答
1

如果你真的想添加value,这是一个List<Package>packages你应该使用

set { packages.AddRange(value); }

否则,

set { packages = value; }
于 2013-09-18T11:40:25.863 回答
1

你不能这样做。

如果你试图设置一个元素,你应该......

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

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

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

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

用法:

MyClass m= new MyClass();
m.Packages=new List<Package>();
于 2013-09-18T11:47:34.850 回答
0

我觉得你在这里有点搞混了。

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

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

这更正了属性。

要添加项目:

Packages.Add(myPackage);
于 2013-09-18T11:38:46.653 回答
0

您正在尝试将该set{}方法用作Add方法,但事实并非如此。 set用于更改整个集合,而Add方法会将项目添加到集合中。其他答案中所说的是正确的......如果您真的希望=操作员添加到集合而不是分配新集合,您可以使用但为了清楚起见,如果是这种情况AddRange(),您应该覆盖操作员。=

于 2013-09-18T11:49:19.517 回答