2012-07-26 22 views
5

Mam listę z dużą ilością obiektów List<MyObjects> - Iteruję tę listę i czytam obiekty. To wszystko w porządku. Właśnie przekonałem się teraz, co byłoby wspaniale, gdybym mógł dodać 1 dodatkową wartość specjalną do tej listy - nie obiekt, tylko 1 wartość czegoś (ciąg).Dodaj nieruchomość do listy?

mogę teraz utworzyć klasę jak

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

ale im próbuje uniknąć. Po prostu potrzebuję 1 ciąg z danymi wejściowymi co List<MyObjects> Jakieś pomysły?

+0

Czy 'MojaValue' jest niezależna od wartości w' MyList'? –

+0

MyValue identyfikuje MyList – miri

+0

Czy to działa w tej sytuacji, aby dodać 'MyList' i' MyValue' do 'Dictionary', np.' Dictionary > '? –

Odpowiedz

8

Tuple<string, List<MyObject>> to opcja. Jednakże, jeśli zamierzasz używać tej pary partii, radziłbym utworzyć niestandardową klasę, aby była bardziej wyraźna - tak jak zrobiłaś, lub wyprowadzając List<MyObject> i dodając ciąg jako właściwość.

Jeśli pracujesz „w zakresie” zawsze można zrobić anonimowe typy:

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

Ale to tylko naprawdę ma korzyści w zakresie metody. Kompilator może dać IntelliSense do tego i jest mocno wpisany podczas kompilacji.

A jeśli naprawdę chcesz iść na całość, należy ExpandoObject z System.Dynamic:

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

To jest wpisane w jednej linii bez wsparcia IntelliSense i wywoła DLR. ExpandoObject prostu wykorzystuje IDictionary<string, object> pod maską, więc ...

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

... jest prawidłowy.

Ostatnia opcja to mały język:. To zadziała, ale doświadczenie programistyczne przeciw niemu nie jest idealne w porównaniu z innymi opcjami. To powiedziawszy, używamy ExpandoObject w naszym kodzie testowym, ale nie pamiętam dlaczego. Można tylko mieć nadzieję, że rozumowanie było dobre, ale prawdopodobnie deweloper wpadł w szał z nowymi zabawkami ...

+2

+1 właśnie to sugerował. – mellamokb

2

możesz dziedziczyć listę i po prostu dodać swoją własność, jest nieco czystsza niż kompilacja Lista wewnątrz innej klasy

0

Możesz rozszerzyć implementację List swoją klasą Needless. W ten sposób nadal możesz traktować listę jako listę.

Powiązane problemy