Назначить список значений для структуры в C #? - PullRequest
5 голосов
/ 01 декабря 2010

У меня есть структура (.NET 3.5):

struct ColumnHeadings 
        { 
            public string Name ; 
            public int Width ; 
        } ;

И когда я пытаюсь присвоить список значений этой структуре, я получаю 'не могу неявно преобразовать строку типа / int в ...':

private void doSomething()
{
    ColumnHeadings[,] ch = new ColumnHeadings[,]{{"column1",100},
                {"column2",100},{"column3",100}};
}

Можно ли присвоить значения структуры таким же образом, как многомерный массив?Или мне нужно присвоить значения с помощью?:

ch.Name = "column 1";

ОБНОВЛЕНИЕ:

Благодаря превосходной обратной связи Марка, правильное решение:

Struct:

struct ColumnHeadings
        {
            private readonly string name;
            private readonly int width;
            public string Name { get { return name; } }
            public int Width { get { return width; } }
            public ColumnHeadings(string name, int width)
            {
                this.name = name;
                this.width = width;
            }
        } 

Затем в методе:

 var ch = new[]{new ColumnHeadings("column1",100),
            new ColumnHeadings("column2",100),
            new ColumnHeadings("column3",100)};

И ссылка , почему взаимозаменяемые структуры не очень хорошая идея.

1 Ответ

7 голосов
/ 01 декабря 2010

во-первых, это, вероятно, вообще не должно быть struct

Синтаксис будет:

ColumnHeadings[] ch = new ColumnHeadings[]{
    new ColumnHeadings{Name="column1",Width=100},
    new ColumnHeadings{Name="column2",Width=100}
};

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

Я бы добавил конструктор:

var ch = new []{
     new ColumnHeadings("column1", 100),
     new ColumnHeadings("column2", 100)
};

с:

struct ColumnHeadings
{
    private readonly string name;
    private readonly int width;
    public string Name { get { return name; } }
    public int Width { get { return width; } }
    public ColumnHeadings(string name, int width)
    {
        this.name = name;
        this.width = width;
    }
}
...