IEnumerable Add 方法仅在使用集合初始值设定项时可用

IEnumerable Add method available only when using collection initializer

我打算创建一个基于 JObject 的不可变 class。

其中一个要求是将对象直接反序列化到我的新自定义 class,就像我们对 JObject 所做的那样。

我已经实现了 GetEnumerator 和 Add 方法来启用集合初始化程序。

代码如下所示

public sealed class ImmutableJObject : IEnumerable
{
    readonly jObject jObeject;

    public ImmutableJObject(params object[] content)
    {
        this.jObject = new jObject(content);
    }

    public IEnumerator GetEnumerator()
    {
        return ((IEnumerable)jObject).GetEnumerator();
    }

    public void Add(string propertyName, JToken value)
    {
        this.jObject.Add(propertyName, value);
    }
}

是否可以仅在使用集合初始化程序时使 Add 方法可访问?

本质上是不可变的,我不希望 Add 方法是 public。 但是,它看起来需要 public 才能启用集合初始化程序

提前致谢!

不,无法将 Add 方法的使用限制在集合初始值设定项中。集合初始化器生成构造对象的代码,然后对其进行变异,因此 根据定义 类型不能支持集合初始化器(实际上能够初始化它,即集合初始化器在哪里不只是抛出异常)并且是不可变的。