有没有办法在 C# 中使用访问器的参数

Is there a way to use parameters with accessors in c#

我非常喜欢 c# 中访问器的语法,但我需要在我的 setter 中为一些属性使用一些额外的值。

有什么方法可以做类似的事情吗?或者这种类型的语法是不可能的吗?

public class Accesssor{
    public List<CustomObject> AccessorStuff { 
        get {
                return AccessorStuff;
            } 
        set (ExtraParameters????) => {
                AccessorStuff.add(new CustomObject(value,ExtraParameters))
            }
        }
}

(我也发现这个很难搜索,因为我不知道它是否有确切的名称,所以如果我也能得到那条信息,我将不胜感激)

提前致谢。

您可以在 C#

中使用所谓的 indexer
public List<CustomObject> this[int index]
{
    get { /* return the specified index here */ }
    set { /* set the specified index to value here */ }
}

然后您可以使用

访问它
obj[5] = someValue;
var result = obj[0];

与方法完全一样,您可以在索引器中拥有任意数量(但至少一个)的任意类型的参数。您还可以重载索引器,即具有不同数量的参数或不同参数类型的不同版本。例如:

public List<CustomObject> this[string name]
{
    ...
}

public List<CustomObject> this[string name, bool caseSensitive]
{
    ...
}

但在任何情况下,索引都适用于 setter 以及 getter。除了属性,索引器不能被命名。如果你需要几个这样的带参数的 "properties" ,只需使用普通的旧方法即可。

public void SetProperty(Extra stuff...)
{
    ...
}

不,这是不可能的 - 如果我使用您的 属性,这不是我所期望的。当我使用 set 时,我希望更改 List,而不是为其添加值。这通常是通过 class 方法实现的:

public void AddObject(CustomObjectType obj, ExtraParameters extraParameters) => 
    AccessorStuff.Add(new CustomObject(obj, ExtraParameters));