Return kilku wartosci ?

0

Panowie mam taki kawalek kodu:

ArchiwumDataContext db = new ArchiwumDataContextFabryka().ArchiwumDataContext();
            var doki = new SzukajKasujPublikator().GetUpdate(publikator, rok, numer, str, dodatek, login, czyMoje, db);
            return doki.Select(d => d.P180);

teraz chcialbym dodatkowo,czyli nie tylko zwrocic to co widzicie P180 ale jeszcze np jakas inna wartosc np takie dwie:
return doki.Select(d => d.P180);
return doki.select(d=>d.JakasInnaWartosc);

Ale nie wiem jak to zrobic,tzn wiem ze moge sobie utworzyc klase z getami i setami itd ale nie mozna w jakis prostszy sposob na szybko zrobic czegos w stylu dwoch return'ow ?

0

chyba nie można zwrócić 2 wartości poprzez return ale możesz wysłać przez referencje.

0

nie, możesz zwrócić tablicę, klasę, strukturę lub cokolwiek co przechowuje kilka wartości

0

Może yield return przejdzie? Zwracana wartość to IEnumerable.

http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

0
        struct StrukturaPomocnicza
        {
            public int P180;
            public int JakasInnaWartosc;
            public StrukturaPomocnicza(int _P180, int _JakasInnaWartosc)
            {
                P180 = _P180;
                JakasInnaWartosc = _JakasInnaWartosc;
            }
        }

...
return doki.Select(d=>new StrukturaPomocnicza(d.P180, d.JakasInnaWartosc));

a jeżeli nie musisz tego zwracać z funkcji, można tak:

var wynik = doki.Select(d => new { d.P180, d.JakasInnaWartosc });

ale nie da się tego zwrócić returnem - najwyżej jako IEnumerable<object>, bo typ jest nienazwany (konkretniej, jest to IEnumerable<typ bez nazwy>). Jest na to obejście, ale to już lepiej zdefinować konkretną strukturę.

0
Azarien napisał(a)
        struct StrukturaPomocnicza
        {
            public int P180;
            public int JakasInnaWartosc;
            public StrukturaPomocnicza(int _P180, int _JakasInnaWartosc)
            {
                P180 = _P180;
                JakasInnaWartosc = _JakasInnaWartosc;
            }
        }

...
return doki.Select(d=>new StrukturaPomocnicza(d.P180, d.JakasInnaWartosc));

można krócej, nie definiując konstruktora:

struct SomeContainer { public int P180, OtherValue; }
...
return doki.Select(d=>new SomeContainer{P180 = d.P180, OtherValue = d.OtherValue});

oczywiście ma to swoje plusy i minusy. plus to banalnie prosta deklaracja struktury/klasy, minus to konieczność podawania nazw pól i - jeszcze większy minus - możliwość nienadania wartości niektórym polom.

a tak przy okazji:

  • nic niemówiące nazwy pól typu "P180" zemszczą się w przyszłości.
  • język polski fatalnie wygląda w nazwach, a za mieszanie tam polskiego z angielskim powinno się ucinać klawiaturę przy samym zasilaczu (np. ArchiwumDataContextFabryka).
  • połączenia z bazą danych się ZAMYKA! ogólnie wszystkie klasy implementujące interfejs IDisposable powinno się tworzyć wewnątrz using.
0

To nie sa pola tylko tabele bazy danych,ja tego nie tworzylem.P180 to jest jedne z atrybutow z tabeli Doks.

0

można krócej, nie definiując konstruktora:
próbowałem tak, i dostawałem błąd kompilacji. ale może „coś źle robiłem”, twój przykład działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1