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

问题描述 投票:1回答:6

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

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

public List<Package> Packages
{
    set { packages.Add(value); }
    get { return packages; }
}
c# list setter getter
6个回答
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;
    }
}

3
投票

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

你在这里做的是尝试qazxsw poi类型qazxsw poi和qazxsw poi类型qazxsw poi。这是不允许的。

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

get

然后调用List<Package>来获取所有包和set


1
投票

你不能这样做。

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

Package

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

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

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

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

用法:

myObject.Packages

0
投票

我觉得你自己有点混淆了。

包的类型是myObject.Packages.Add(package)。当你打电话给public void addPackage(Package pack){ packages.Add(pack); } 时,public List<Package> Packages { set { packages=value; } get { return packages; } } 实际上是MyClass m= new MyClass(); m.Packages=new List<Package>();

List<Package>

这纠正了财产。

要添加项目:

packages.Add(value);

0
投票

如果你真的想把packages List<Package>添加到public List <Package> Packages { get { return packages; } set { packages = value; } } 你应该使用

Packages.Add(myPackage);

除此以外,

value

0
投票

您正在尝试使用List<Package>方法作为packages方法,但事实并非如此。 set { packages.AddRange(value); } 用于更改整个集合,而set { packages = value; } 方法将添加项目到集合。其他答案中陈述的内容是正确的...如果你真的想要set{}操作符添加到集合而不是分配新的集合,你可以使用Add但为了清楚起见,你应该覆盖set操作符,如果这是案子。

© www.soinside.com 2019 - 2024. All rights reserved.