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
方法的使用限制在集合初始值设定项中。集合初始化器生成构造对象的代码,然后对其进行变异,因此 根据定义 类型不能支持集合初始化器(实际上能够初始化它,即集合初始化器在哪里不只是抛出异常)并且是不可变的。
我打算创建一个基于 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
方法的使用限制在集合初始值设定项中。集合初始化器生成构造对象的代码,然后对其进行变异,因此 根据定义 类型不能支持集合初始化器(实际上能够初始化它,即集合初始化器在哪里不只是抛出异常)并且是不可变的。