在自定义类型上使用集合初始值设定项语法?

2024-03-18

我有一个很大的静态列表,它基本上是一个查找表,所以我在代码中初始化该表。

private class MyClass
{
    private class LookupItem
    {
        public int Param1    { get; set; }
        public int Param2    { get; set; }
        public float Param2  { get; set; }
        public float Param4  { get; set; }
    }

    private static List<LookupItem> _lookupTable = new List<LookupItem>()
    { 
        new LookupItem() { Param1 = 1, Param2 = 2, Param3 = 3 Param4 = 4 },
        new LookupItem() { Param1 = 5, Param2 = 6, Param3 = 7 Param4 = 8 },
        //etc
    }
}

真实的LookupItem有更多属性,因此我添加了一个构造函数以允许更紧凑的初始化格式:

private class MyClass
{
    private class LookupItem
    {
        public int Param1    { get; set; }
        public int Param2    { get; set; }
        public float Param2  { get; set; }
        public float Param4  { get; set; }

        public LookupItem(int param1, int param2, float param3, float param4)
        {
            Param1 = param1;
            Param2 = param2;
            Param3 = param3;
            Param4 = param4;    
        }
    }

    private static List<LookupItem> _lookupTable = new List<LookupItem>()
    { 
        new LookupItem(1, 2, 3, 4),
        new LookupItem(5, 6, 7, 8),
        //etc
    }
}

我真正想做的是对对象本身使用集合初始化程序格式,这样我就可以摆脱new LookupItem()在每一行。例如:

private static List<LookupItem> _lookupTable = new List<LookupItem>()
{ 
    { 1, 2, 3, 4 },
    { 5, 6, 7, 8 },
    //etc
}

这可能吗?我喜欢认为这是因为KeyValuePair's of a Dictionary<>可以这样初始化。

MSDN http://msdn.microsoft.com/en-us/library/bb384062.aspx States:

集合初始值设定项可让您指定一个或多个元素 初始化时初始化实现的集合类 IE可枚举。元素初始值设定项可以是一个简单的值, 表达式或对象初始值设定项。通过使用集合初始值设定项 您不必指定多次调用 Add 方法 源代码中的类;编译器添加调用。

这是否意味着我需要实施IEnumerable on my LookupItem类并返回每个参数?不过,我的课程不是收藏课程。


我认为你需要创建一个自定义集合而不是列表。例如,将其称为 LookupItemTable。为该集合提供一个 Add(int, int, float, float) 方法并让它实现 IEnumerable。例如:

class LookupItem
{
    public int a;
    public int b;
    public float c;
    public float d;
}

class LookupItemTable : List<LookupItem>
{
    public void Add(int a, int b, float c, float d)
    {
        LookupItem item = new LookupItem();
        item.a = a;
        item.b = b;
        item.c = c;
        item.d = d;
        Add(item);
    }
}

private static LookupItemTable _lookupTable = new LookupItemTable {
    { 1, 2, 3, 4 },
    { 5, 6, 7, 8 }
};

我现在已经尝试了上面的代码,它似乎对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在自定义类型上使用集合初始值设定项语法? 的相关文章

随机推荐