Mam problem z kowariancją przy typach generycznych.
Mam interfejs IModel i klasę Model, która implementuje IModel.
Tworzę sobie klasę:

    
public class Data where T : IModel
    { }
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Ok. Ostatnio Visual Studio rzuciło mi błędem "Cannot use ref or out parameter 'x' inside an anonymous method, lambda expression, or query expression". Nigdy wcześniej się z tym nie spotkałem, więc postanowiłem to zbadać.

Okazuje się, że wyrażenia lambda mają swój własny cykl życia zmiennych. Zmienne są trzymane w wyrażeniach lambda, nawet wtedy, kiedy ich zakres powinien się już skończyć i GC powinien je zgarnąć. Dlatego, gdybyśmy przekazali zmienną przez ref, moglibyśmy kiedyś
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Maav: Nie udało mi się doprowadzić do działania tego na refach. (W sumie nie potrzebowałem tego refa, więc mogłem go wyrzucić w moim kodzie i się nie przejmować). Za to pobawiłem się chwilę i ze wskaźnikami już działa. Może jeszcze w wolnym czasie postaram się to zepsuć, żeby rzuciło mi wyjątkiem czy coś.


        
unsafe public void TestMethod(int* x)
        {
  • Odpowiedz
@Maav: Szczerze mówiąc o cyklu życia zmiennych w funkcjach lambda czytałem w jakimś poradniku dla początkujących, więc nie wiem na ile to odkrywcza a na ile podstawowa wiedza. Tak czy siak plus za opisanie tego.
  • Odpowiedz