C# IEnumerable Add方法仅在使用集合初始值设定项时可用
我计划基于JObject创建一个不可变的类 其中一个要求是将对象直接反序列化到我的新自定义类上,就像我们对JObject所做的那样 我已经实现了GetEnumerator和Add方法来启用集合初始值设定项 代码如下所示C# IEnumerable Add方法仅在使用集合初始值设定项时可用,c#,collections,enumerable,collection-initializer,C#,Collections,Enumerable,Collection Initializer,我计划基于JObject创建一个不可变的类 其中一个要求是将对象直接反序列化到我的新自定义类上,就像我们对JObject所做的那样 我已经实现了GetEnumerator和Add方法来启用集合初始值设定项 代码如下所示 public sealed class ImmutableJObject : IEnumerable { readonly jObject jObeject; public ImmutableJObject(params object[] content)
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方法是公共的。
但是,它看起来需要是公共的,以便启用集合初始值设定项
谢谢你 否,无法将Add方法的使用限制为集合初始值设定项。集合初始值设定项生成构造对象的代码,然后对其进行变异,因此根据定义,类型不能支持实际上能够对其进行初始化的集合初始值设定项,即集合初始值设定项不只是抛出异常且不可变