我正在尝试在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; }
}
答案 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}}运算符。