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