2010-12-01 6 views
5

У меня есть .NET-структура (3,5):Назначить список значений для структуры в C#?

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

UPDATE:

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

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

И link к почему mutuable структуры не являются хорошей идеей.

+0

из любопытства, почему `ColumnHeadings` двухмерное? – 2010-12-01 13:32:06

+0

@ C. Ross - его 2D из-за попытки массивов mashup/structs ... :) – 2010-12-01 13:34:27

ответ

7

во-первых, что, вероятно, не должно быть 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; 
    } 
} 
Смежные вопросы