当我们可以有数百个对象时,用C#初始化多实例实例及其属性的最简单方法是什么?

赫尔比拉

假设我有一个类,它具有以下构造函数:

TestClass();
TestClass(int payloadLength);
TestClass(param byte[] payload);

并且,对于我的应用程序,我需要创建此类的多个对象,所有这些对象均具有不同的值。比方说:

TestClass obj1 = new TestClass(0)
{
    id = 0x01;
    value = 0x25;
    name = "First Object"
};

byte[] obj2Payload = new byte[] { 0x00, 0x00, 0x02 };

TestClass obj2 = new TestClass(obj2Payload)
{
    id = 0x02;
    value = 0x53;
    name = "Second Object"
};

问题是,我需要初始化该类的许多对象。我们可以有数百个对象。

有没有简单的方法可以初始化它们,就像使用XMacros在C / C ++中进行初始化一样?还是类似的东西?

注意:在此示例中,我使用obj1和obj2作为实例的名称,但是在实际应用程序中,实例的名称应该有效。

飞狗57

在这里-使用集合初始化语法。有点像是由宏驱动的,但不是。

首先创建您的TestClass类。我想这就是您想在您的问题中包含的内容(但没有这样做-您键入它会很不错):

public class TestClass
{
    public int Id { get; set; }
    public int Value { get; set; }
    public string Name { get; set; }

    private byte[] _payload;


    public TestClass()
    {
        _payload = new byte[0];
        Name = string.Empty;
    }

    public TestClass(int payloadLength)
    {
        _payload = new byte[payloadLength];
        Name = string.Empty;
    }

    public TestClass(byte[] payload)
    {
        _payload = payload;
        Name = string.Empty;
    }
}

然后,创建专用的收集类。请注意,它实现IEnumerable并具有Add正确签名方法(实际上,它具有几个重载的Add方法)。IEnumerable实现yield return以普通方式使用简单的语句:

public class TestCollection : IEnumerable<TestClass>, IEnumerable
{
    private readonly List<TestClass> _items = new List<TestClass>();

    public void Add(int id, int val, string name)
    {
        var item = new TestClass
        {
            Id = id,
            Value = val,
            Name = name,
        };
        _items.Add(item);
    }

    public void Add(int id, int val, string name, int payloadLength)
    {
        var item = new TestClass(payloadLength)
        {
            Id = id,
            Value = val,
            Name = name,
        };
        _items.Add(item);
    }

    public void Add(int id, int val, string name, params byte[] payload)
    {
        var item = new TestClass(payload)
        {
            Id = id,
            Value = val,
            Name = name,
        };
        _items.Add(item);
    }

    public IEnumerator<TestClass> GetEnumerator()
    {
        foreach (var item in _items)
        {
            yield return item;
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}

每个Add方法都采用传递的参数,并使用它们创建一个TestClass然后将其添加到其私人收藏中。

最后,这是一些创建集合的代码。请注意,各种初始化器都Add方法的签名匹配

var stuff = new TestCollection
{
    {0x01, 0x25, "First Object"},
    {0x01, 0x53, "Second Object"},
    {0x03, 0x42, "With Payload Length", 12},
    {0x04, 0xff, "With a Payload as an Array", new byte[] {1, 2, 3, 4}},
    {0x05, 0xab, "With a Payload as a params Array", 1, 2, 3, 4},
};

该语法让人想起JSON语法,但是参数/属性是通过位置而不是名称来设置的(因此,它需要更少的键入)。它比在运行时解析文本文件要有效得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们可以在方法内部创建IIB(实例初始化块)吗?如果我们不能为什么不给出编译时错误呢?

来自分类Dev

当我调用类的实例方法时,为什么没有初始化显示为方法?

来自分类Dev

C#| 使用另一个实例的属性初始化新对象的语法

来自分类Dev

用模型中的数百个问题表示表单的最佳方法是什么

来自分类Dev

C#:从INI中删除节及其键的最简单方法是什么

来自分类Dev

C#:从INI中删除节及其键的最简单方法是什么

来自分类Dev

我可以在类外部初始化数组实例变量吗?以下代码的最佳OOP方法是什么?

来自分类Dev

为什么我的Windows有数百个临时IPv6地址?

来自分类Dev

为什么通过指针初始化创建对象的实例时std :: string属性为空

来自分类Dev

从字符串向量初始化2d数组的最简单方法是什么?

来自分类Dev

为什么我的C#对象没有实例化?

来自分类Dev

带有数百个块的if else语句的有效方法

来自分类Dev

当我们使用 getBean 方法创建原型 bean 时,是否创建了 bean 属性(单例)的新实例?

来自分类Dev

当我们说同步(实例字段)..是什么意思?

来自分类Dev

一次将数百个图像绘制到JFrame的有效方法是什么?

来自分类Dev

当我们打印其他未初始化的变量时,联合如何工作?

来自分类Dev

是否有可能重置FTDI虚拟com端口枚举,我们在生产环境中很容易获得数百个COM端口

来自分类Dev

我们可以在另一个类的构造函数的帮助下初始化对象吗?

来自分类Dev

我们可以在另一个类的构造函数的帮助下初始化对象吗?

来自分类Dev

当我们仍然可以在抽象类中使用它们时,抽象属性的目的是什么?

来自分类Dev

在Python中获取Google Compute Engine实例IP地址的最简单方法是什么?

来自分类Dev

在Python中初始化矩阵的更简单方法是什么?

来自分类Dev

Scala:在XML中获取所有叶节点及其路径的最简单方法是什么?

来自分类Dev

为什么当我们只给一个变量赋一个变量并打印时打印所有对象的属性

来自分类Dev

TypeScript:初始化嵌套对象的更简单方法?

来自分类Dev

一个类具有另一个类的实例的JVM初始化顺序是什么

来自分类Dev

当我们可以看到一个简单的 vb6 压缩 dll 时

来自分类Dev

如果“ puts”方法是私有实例方法,为什么我们可以从任何地方调用它?

来自分类Dev

为什么我们在构造函数中初始化对象

Related 相关文章

  1. 1

    我们可以在方法内部创建IIB(实例初始化块)吗?如果我们不能为什么不给出编译时错误呢?

  2. 2

    当我调用类的实例方法时,为什么没有初始化显示为方法?

  3. 3

    C#| 使用另一个实例的属性初始化新对象的语法

  4. 4

    用模型中的数百个问题表示表单的最佳方法是什么

  5. 5

    C#:从INI中删除节及其键的最简单方法是什么

  6. 6

    C#:从INI中删除节及其键的最简单方法是什么

  7. 7

    我可以在类外部初始化数组实例变量吗?以下代码的最佳OOP方法是什么?

  8. 8

    为什么我的Windows有数百个临时IPv6地址?

  9. 9

    为什么通过指针初始化创建对象的实例时std :: string属性为空

  10. 10

    从字符串向量初始化2d数组的最简单方法是什么?

  11. 11

    为什么我的C#对象没有实例化?

  12. 12

    带有数百个块的if else语句的有效方法

  13. 13

    当我们使用 getBean 方法创建原型 bean 时,是否创建了 bean 属性(单例)的新实例?

  14. 14

    当我们说同步(实例字段)..是什么意思?

  15. 15

    一次将数百个图像绘制到JFrame的有效方法是什么?

  16. 16

    当我们打印其他未初始化的变量时,联合如何工作?

  17. 17

    是否有可能重置FTDI虚拟com端口枚举,我们在生产环境中很容易获得数百个COM端口

  18. 18

    我们可以在另一个类的构造函数的帮助下初始化对象吗?

  19. 19

    我们可以在另一个类的构造函数的帮助下初始化对象吗?

  20. 20

    当我们仍然可以在抽象类中使用它们时,抽象属性的目的是什么?

  21. 21

    在Python中获取Google Compute Engine实例IP地址的最简单方法是什么?

  22. 22

    在Python中初始化矩阵的更简单方法是什么?

  23. 23

    Scala:在XML中获取所有叶节点及其路径的最简单方法是什么?

  24. 24

    为什么当我们只给一个变量赋一个变量并打印时打印所有对象的属性

  25. 25

    TypeScript:初始化嵌套对象的更简单方法?

  26. 26

    一个类具有另一个类的实例的JVM初始化顺序是什么

  27. 27

    当我们可以看到一个简单的 vb6 压缩 dll 时

  28. 28

    如果“ puts”方法是私有实例方法,为什么我们可以从任何地方调用它?

  29. 29

    为什么我们在构造函数中初始化对象

热门标签

归档