2011-05-17 10 views
7

¿Qué es una buena colección en C# para almacenar los datos a continuación:una buena colección de C#

He casillas de verificación que traen en un subjectId, varnumber, nombre_var, y el título asociado a cada casilla.

necesito una colección que puede ser de cualquier tamaño, tal vez algo así como ArrayList con tal vez:

 list[i][subjectid] = x; 
     list[i][varnumber] = x; 
     list[i][varname] = x; 
     list[i][title] = x; 

buenas ideas?

Respuesta

14

A List<Mumble> donde Mumble es una pequeña clase auxiliar que almacena las propiedades.

List<Mumble> list = new List<Mumble>(); 
... 
var foo = new Mumble(subjectid); 
foo.varnumber = bar; 
... 
list.Add(foo); 
,.. 
list[i].varname = "something else"; 
+1

para la ayuda con la clase de murmullo, consulte a continuación el diccionario – chris

0

Es probable que desee utilizar un two-dimensional array para esto, y asignar posiciones en la segunda dimensión de la matriz para cada uno de sus valores. Por ejemplo, list[i][0] sería subjectid, list[i][1] sería varnumber, y así sucesivamente.

+0

¿Puede la 1ra dimensión crecer y reducirse o tengo que asignar un tamaño específico antes de tiempo? – chris

+4

Yuck. No [números mágicos] (http://en.wikipedia.org/wiki/Magic_number_ (programación)). Son terribles para solucionar los problemas de seis meses en el futuro. –

+0

Esta no es una solución muy buena, porque los índices están débilmente tipados. (es decir, debe saber que el índice 0 está sujeto). – Alan

7
public Class MyFields 
{ 
    public int SubjectID { get; set; }   
    public int VarNumber { get; set; } 
    public string VarName { get; set; } 
    public string Title { get; set; } 
} 

var myList = new List<MyFields>(); 

Para acceder a un miembro:

var myVarName = myList[i].VarName; 
1

una lista genérica, List<YourClass> sería genial - donde YourClass tiene propiedades de subjectid, etc. varnumber

0

determinar lo que la colección, por lo general comienza con lo que quieres hacer con eso?

Si su único criterio es que puede ser anysize, entonces yo considero List<>

0

Dado que esta es una clave, valor par te recomendaría que utiliza una colección basada genérica IDictionary.

// Create a new dictionary of strings, with string keys, 
// and access it through the IDictionary generic interface. 
IDictionary<string, string> openWith = 
    new Dictionary<string, string>(); 

// Add some elements to the dictionary. There are no 
// duplicate keys, but some of the values are duplicates. 
openWith.Add("txt", "notepad.exe"); 
openWith.Add("bmp", "paint.exe"); 
openWith.Add("dib", "paint.exe"); 
openWith.Add("rtf", "wordpad.exe"); 
+0

no funcionará del todo, ya que el subjectid, varnumbers están todos unidos como una clave primaria única, por lo que no puede tener el diccionario dictSubject con la misma clave de asunto (ese es el problema Estoy teniendo) – chris

+0

Normalmente uso el método de Hans, ya que te permite escribir con fuerza toda la colección para que esa sea la mejor opción. Luego puede usar una enumeración para denotar la clave. –

0

Como otros han dicho, parece que sería mejor crear una clase para contener los valores para que su lista devuelve un objeto que contiene todos los datos que necesita. Si bien las matrices bidimensionales pueden ser útiles, esta no parece una de esas situaciones.

Para obtener más información acerca de una solución mejor y por qué una de dos dimensiones matriz/lista en este caso no es una buena idea es posible que desee leer: Create a list of objects instead of many lists of values

0

Si hay una remota posibilidad de que el orden de [i] no es en un orden predecible, o posiblemente tiene lagunas, pero hay que utilizarlo como una clave:

public class Thing 
{ 
    int SubjectID { get; set; }   
    int VarNumber { get; set; } 
    string VarName { get; set; } 
    string Title { get; set; } 
} 

Dictionary<int, Thing> things = new Dictionary<int, Thing>(); 
dict.Add(i, thing); 

y para buscar una Thing:

var myThing = things[i]; 
Cuestiones relacionadas