将属性组从1个类传递到另一个类

时间:2010-03-30 21:57:59

标签: c# asp.net data-structures parameters

我在一个班级中有一组13个属性。我为这些属性创建了一个结构,并将其传递给另一个类。

我需要添加这13个属性中的另外10组。总共有130处房产。

我该怎么办?

1.我可以将所有130个属性添加到结构中。这会影响性能和可读性吗

2.我可以创建一个结构列表但不知道如何访问一个项目 例如。 添加到列表中:

listRowItems.Add(new RowItems(){a = 1,b = 1,c = 1,d = 1 ...});

listRowItems.Add(new RowItems(){a = 2,b = 2,c = 2,d = 2 ...});

如何访问第二组项b?

3.我可以只使用包含130个项目的词典

4.我应该使用词典列表(再次我不知道如何访问某个特定项目)

5.我应该通过一类130个属性

为了您的兴趣,属性是用于复合控件的css参数。该控件在每行中显示13个元素,共有10行,每行可自定义。

6 个答案:

答案 0 :(得分:2)

为什么不将类的实例传递给另一个类?我不清楚为什么属性需要在另一个数据结构中。如果要限制其他类可以访问的属性,可以定义接口并在类A上实现它,然后在接收类B作为接口类型的方法中键入参数。

答案 1 :(得分:0)

  

如何访问第二个组项目   B'

用整数索引。

RowItems rowItems = list[index];

无论您做什么,都不要扩展类或结构以获得更多属性,除非这些属性与特定项相关。如果该项有13个属性来描述它,那么class / struct也应如此。如果需要描述多个项目,请使用多个对象,例如List集合。

答案 2 :(得分:0)

要访问第二个项目的b属性,只需:

listRowItems[1].b

老实说,虽然这看起来很复杂。目前尚不清楚究竟是什么代表了你所做的实际CSS,但我只想在主要属性上使用由row索引的字典。您不应该创建新的类或结构来简单地表示另一个类的属性,除非它们属于逻辑子类(与使用嵌套类相同的指导原则)。

答案 3 :(得分:0)

如果要按索引号访问10行,请传递结构的通用列表:

public void DoIt(System.Collections.Generic.List<MyPropertyStruct> list) {
    var thirdItem = list[2];
    }

如果您需要通过某种键访问10行,请使用通用词典:

public void DoIt(System.Collections.Generic.Dictionary<string, MyPropertyStruct> d) {
    var sallyItem = d["sally"];
    }

答案 4 :(得分:0)

  

只是为了您对这些物业的兴趣   是用于a的css参数   复合控制。控制   每行显示13个元素   有10行,每行是   可定制的。

我会用这样的东西:

    public class ControlElement{}
    public class ControlRow
    {
        public Dictionary<string, ControlElement> Elements
        {
            get;
            set;
        }
    }

    public class Control
    {
        public List<ControlRow> Rows
        {
            get;
            set;
        }
    }

答案 5 :(得分:0)

那样的东西?

class StyleDefinition
    {
        public string Property { get; set; }
        public string Value { get; set; }

        public StyleDefinition(string p, string v)
        {
            Property = p;
            Value = v;
        }
    }

    class Cell {
        public List<StyleDefinition> Styles { get; set; }
        public string Value { get; set; }
    }

    class CellBuilder
    {
        public Cell CreateCell(List<StyleDefinition> styles, string value)
        {
            return new Cell { Styles = styles, Value = value };
        }

        public List<Cell> CreateRow(Dictionary<int, List<StyleDefinition>> styles, IEnumerable<string> values)
        {
            var res = new List<Cell>();
            var it = values.GetEnumerator();
            foreach( var kp in styles) {
                // logic for cell with key = kp.Key
                res.Add(CreateCell(kp.Value, it.Current));
                it.MoveNext();
            }

            return res;
        }

        public List<List<Cell>> CreateTable(Dictionary<int, Dictionary<int, List<StyleDefinition>>> styles, IEnumerable<IEnumerable<string>> values)
        {
            var res = new List<List<Cell>>();
            var it = values.GetEnumerator();
            foreach (var kp in styles)
            {                            
                res.Add(CreateRow(kp.Value, it.Current));
                it.MoveNext();
            }

            return res;
        }

    }
相关问题