2012-07-26 26 views
5

Tengo una lista con muchos objetos List<MyObjects> - Estoy iterando a través de esta lista y leyendo los objetos. Eso está bien. Acabo de repasar ahora, lo que sería genial si pudiera agregar 1 valor especial más a esta Lista, no un Objeto, solo 1 valor de algo (una cadena).Añadir propiedad a una lista?

ahora podría crear una clase como

class Needless 
{ 
    public List<MyObjects> MyList { get; set; } 
    public string MyValue { get; set; } 
} 

, pero estoy tratando de evitar eso. Realmente necesito 1 cadena con una entrada cada List<MyObjects> ¿Alguna idea?

+0

¿'MyValue' es independiente de los valores de' MyList'? –

+0

MyValue identifica MyList – miri

+0

¿Funcionaría en esta situación para agregar 'MyList' y' MyValue' a 'Dictionary', como' Dictionary > '? –

Respuesta

8

Tuple<string, List<MyObject>> es una opción. Sin embargo, si vas a usar este emparejamiento mucho, te aconsejaría crear una clase personalizada para que sea más explícito, como lo has hecho, o derivando List<MyObject> y agregando la cadena como una propiedad.

Si está trabajando "en su alcance" siempre se puede hacer que los tipos anónimos:

var t = new { TheString = "", TheList = new List<MyObject>() }; 
var list = t.TheList; 
var s = t.TheString; 

Pero esto en realidad sólo tiene beneficios en el ámbito de un método. El compilador puede dar IntelliSense para esto y está fuertemente tipado en tiempo de compilación.

O si realmente quieres ir a por todas, utilice ExpandoObject de System.Dynamic:

var expando = new ExpandoObject(); 
expando.List = new List<MyObject>(); 
expando.TheString = ""; 

Esto se escribe en línea sin ningún tipo de apoyo de IntelliSense, e invocará el DLR. ExpandoObject simplemente utiliza un IDictionary<string, object> bajo el capó, así que ...

var dict = (IDictionary<string, object>)expando; 

... es válido.

La última opción es pequeña irónica. Funcionará, pero la experiencia de desarrollo en su contra no es ideal en comparación con otras opciones. Dicho esto, usamos ExpandoObject en nuestro código de prueba, pero no puedo recordar por qué. Uno solo puede esperar que el razonamiento sea sólido, pero es probable que un desarrollador se maree con juguetes nuevos ...

+2

+1 solo iba a sugerir eso. – mellamokb

2

puede heredar la Lista y simplemente agregar su propiedad, es un poco más limpio que la Lista compuesta dentro de otra clase

0

Puede extender una implementación de lista con su clase innecesaria. De esa manera, aún puede tratar su lista como una lista.

Cuestiones relacionadas