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

时间:2017-11-15 22:14:12

标签: c# collections enumerable collection-initializer

我计划基于JObject创建一个不可变类。

其中一个要求是直接将对象反序列化到我的新自定义类中,就像我们使用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方法公开。 但是,为了启用集合初始化程序,它看起来需要公开

提前致谢!

1 个答案:

答案 0 :(得分:1)

不,没有办法将Add方法的使用限制在集合初始值设定项中。集合初始值设定项会生成构造对象的代码,然后对其进行变更,因此按照定义类型不能支持集合初始值设定项(实际上能够初始化它,即集合初始化程序不在哪里&#39) ; t只是抛出异常)并且是不可变的。