2010-12-01 7 views
5

J'ai un struct (.NET 3.5):Affecter une liste de valeurs à une structure en C#?

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

Et quand je tente d'attribuer une liste de valeurs à ce struct je reçois un « ne peut pas convertir implicitement type string/int ... »:

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

Les valeurs de structure peuvent-elles être affectées de la même manière qu'un tableau multidimensionnel? Ou dois-je attribuer les valeurs à l'aide ?:

ch.Name = "column 1"; 

MISE À JOUR:

Merci à d'excellents commentaires de Marc la solution correcte est:

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

Puis dans la méthode:

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

Et le link pourquoi les structures mutables ne sont pas une bonne idée.

+0

Par curiosité, pourquoi est 'ColumnHeadings' deux dimensions? –

+0

@ C. Ross - sa 2D en raison d'essayer de mashup tableaux/structures ... :) –

+0

un tableau 2D doit contenir des données homogènes; Ceci est vraiment un tableau à 1 dimension où chaque élément a 2 valeurs - très différentes –

Répondre

7

d'une part, cela ne devrait probablement pas être un structdu tout

La syntaxe sera:

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

Cependant, en plus vous avez la question des domaines publics, et le fait que c'est une structure mutable - les deux sont dangereux. Pas vraiment.

Je voudrais ajouter un constructeur:

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

avec:

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

+1, mais suggère d'ajouter un en-tête 1 de "Ne fais pas ça" :) –

+0

Cela a beaucoup plus de sens, mais il est multi- dimensionnel Comment cela fonctionnerait-il avec un tableau 2-D? –

+0

@CRoss - voir mon commentaire sur la question; le 2-d est, IMO, une erreur –

Questions connexes