当前位置: 首页 > 知识库问答 >
问题:

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

商品
2023-03-14

我计划创建一个基于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个答案

穆建元
2023-03-14

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

 类似资料:
  • 如果您可以在列表中执行此操作 你怎么能在字典里做同样的事情呢?

  • 本文向大家介绍详解C#中使用对象或集合的初始值设定项初始化的操作,包括了详解C#中使用对象或集合的初始值设定项初始化的操作的使用技巧和注意事项,需要的朋友参考一下 使用对象初始值设定项初始化对象 可以使用对象初始值设定项以声明方式初始化类型对象,而无需显式调用类型的构造函数。 下面的示例演示如何将对象初始值设定项用于命名对象。编译器通过先访问默认实例构造函数然后处理成员初始化处理对象初始值设定项。

  • 我通过解决一些黑客等级问题来学习java。下面的代码是关于学习静态初始值设定项块的。例外情况是thown和Capture,但程序仍在运行,我不确定原因。 输入:-1,2 预期输出:java.lang.例外:宽度和高度必须为正 实际输出:宽度和高度必须为正-2

  • 我对Swift类有一个问题。我有UITableViewController类和UITableViewCell类的swift文件。我的问题是UITableViewCell类和网点。这个类有一个错误Class“HomeCell”没有初始化程序,我不明白这个问题。 感谢您的回复。

  • 问题内容: 在新项目中工作: iOS>应用程序>游戏> SpriteKit,Swift,iPhone 在这里,我已经编写了一个接受十六进制颜色值和alpha双精度值的函数。我正在查看Swift文档,并引用我在网上看到的一个优雅的解决方案。我注意到这个确切的代码可以编译,运行并在模拟器中显示 iPhone5 构建目标的正确颜色。 但… 当我的构建目标设置为 iPhone5s 时,完全相同的项目甚至都

  • 使用C#对象初始化器有什么好处吗? 在C语言中,没有引用,所有内容都封装在一个对象中,因此在创建对象后使用它们而不是初始化成员是有意义的。 在C#中使用它们的情况是什么? 如何:使用对象初始值设定项初始化对象(C#编程指南)

  • 我正在尝试使用spring boot建立一个简单的web CRUD应用程序。我知道我应该是spring boot servelet初始化器,但在日志中,我怀疑它没有正常运行,因为它没有记录我写的内容。 最终目标是能够访问http://localhost:8080/lnu-project/和home.jsp显示。 这里有一个在GitHub上的链接。https://github.com/rjpruit

  • 在下面的两个示例代码中,我试图使用C#normal方法和对象初始值设定项实例化一个名为Test的类。 在上面的示例代码中,我可以清楚地了解调试时哪个属性显示异常。 在上面的代码中,当我使用对象初始化器时,我无法理解哪个属性被抛出异常。在这里我不能逐行调试。如果我初始化了很多属性,很难识别。 这里是我的问题:如何从异常窗口识别哪个属性显示异常?现在,内部异常为null。