una sharp recorrer nxm matriz matrices leer inicializar imprimir hacer como array c# arrays struct

sharp - matriz nxm en c#



Inicializando una matriz de estructuras en C# (5)

¿Cómo puedo inicializar una matriz constante / estática de estructuras lo más claramente posible?

class SomeClass { struct MyStruct { public string label; public int id; }; const MyStruct[] MyArray = { {"a", 1} {"b", 5} {"q", 29} }; };


¿Estás usando C # 3.0? Puede usar los inicializadores de objetos de esta manera:

static MyStruct[] myArray = new MyStruct[]{ new MyStruct() { id = 1, label = "1" }, new MyStruct() { id = 2, label = "2" }, new MyStruct() { id = 3, label = "3" } };


Cambia const a static readonly e inicialízalo así

static readonly MyStruct[] MyArray = new[] { new MyStruct { label = "a", id = 1 }, new MyStruct { label = "b", id = 5 }, new MyStruct { label = "q", id = 29 } };


En primer lugar, ¿ realmente tienes que tener una estructura mutable? Ellos son malvados Del mismo modo, campos públicos.

Aparte de eso, solo crearía un constructor tomando los dos bits de datos:

class SomeClass { struct MyStruct { private readonly string label; private readonly int id; public MyStruct (string label, int id) { this.label = label; this.id = id; } public string Label { get { return label; } } public string Id { get { return id; } } } static readonly IList<MyStruct> MyArray = new ReadOnlyCollection<MyStruct> (new[] { new MyStruct ("a", 1), new MyStruct ("b", 5), new MyStruct ("q", 29) }); }

Tenga en cuenta el uso de ReadOnlyCollection lugar de exponer la matriz en sí, esto lo hará inmutable, evitando el problema de exposición de matrices directamente . (El programa de códigos inicializa una matriz de estructuras; pasa la referencia al constructor de ReadOnlyCollection<> ).


No puede inicializar tipos de referencia por defecto que no sean null. Tienes que hacerlos de solo lectura. Entonces esto podría funcionar;

readonly MyStruct[] MyArray = new MyStruct[]{ new MyStruct{ label = "a", id = 1}, new MyStruct{ label = "b", id = 5}, new MyStruct{ label = "c", id = 1} };


Usaría un constructor estático en la clase que establece el valor de una matriz de solo lectura estática.

public class SomeClass { public readonly MyStruct[] myArray; public static SomeClass() { myArray = { {"foo", "bar"}, {"boo", "far"}}; } }