передача групп свойств из одного класса в другой - PullRequest
0 голосов
/ 31 марта 2010

У меня есть группа из 13 свойств в классе. Я создал структуру для этих свойств и передал ее другому классу.

Мне нужно добавить еще 10 групп из этих 13 свойств. Так что в общей сложности 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 ]

2 голосов
/ 31 марта 2010

Почему бы просто не передать экземпляр класса другому классу?Мне не понятно, почему свойства должны быть в другой структуре данных.Если вы хотите ограничить свойства, к которым может обращаться другой класс, вы можете определить интерфейс и реализовать его в классе A, а затем ввести аргумент в методе, который получает класс B в качестве типа интерфейса.

0 голосов
/ 31 марта 2010

Что-то в этом роде?

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;
        }

    }
0 голосов
/ 31 марта 2010

Просто для вашего интереса свойства параметры 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;
        }
    }
0 голосов
/ 31 марта 2010

Если вы хотите получить доступ к 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"];
    }
0 голосов
/ 31 марта 2010

Чтобы получить доступ к свойству b второго элемента просто:

listRowItems[1].b

Честно, хотя это кажется довольно сложным. Не совсем понятно, что представляет собой фактический CSS в том, что вы делаете, но я бы просто использовал словарь, проиндексированный по строкам, в основном свойстве. Не следует создавать новые классы или структуры для простого представления свойств другого класса, если они не попадают в логический подкласс (те же правила, что и при использовании вложенных классов).

0 голосов
/ 31 марта 2010

Как получить доступ ко второму элементу группы б

По целочисленному индексу.

RowItems rowItems = list[index];

Что бы вы ни делали, не расширяйте класс или структуру, чтобы иметь больше свойств, если только эти свойства не относятся к конкретному элементу. Если элемент имеет 13 свойств, чтобы описать его, то должен также быть класс / структура. Если вам нужно описать несколько элементов, используйте несколько объектов, например, в коллекции списков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...