Autor Wątek: [c#] serializacja tablic dwuwymiarowych  (Przeczytany 1665 razy)

Offline ShadowDancer

  • Redaktor

# Czerwiec 22, 2010, 12:23:45
Mam sobie klasę foo, a w niej siedzi sobie tablica 2d z obiektami typu region:

    [XmlRoot]
    public class Foo
    {
        public Foo()
        {

        }

        [XmlElement]
        public Region[][] Map { get; set; }

        //metoda tworząca instancje obiektów
        public void InitMap(int Width, int Height)
        {
            Map = new Region[Width][];
                for (int x = 0; x < Width; x++)
                {
                    Map[x] = new Region[Height];
                    for (int y = 0; y < Height; y++)
                    {
                        Map[x][y] = new Region();
                    }
                }
        }
   }

Podczas próby wywala taki błąd:

Cytuj
Nie można wygenerować tymczasowej klasy (wynik=1).
error CS0030: Nie można przekonwertować typu 'Region[][]' na 'Region[]'
error CS0029: Nie można dokonać niejawnej konwersji typu 'Region[]' na 'Region[][]'

Wcześniej próbowałem zrobić tablicę typu [,], ale wyczytałem, że tego nie da się serializować(wyrzucało problem z odbiciem).

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline baranek

  • Użytkownik

# Czerwiec 22, 2010, 23:34:41
Mogę źle kojarzyć, ale się nie da. Trzeba opakować taka tablice dwuwymiarową w klase albo strukturę.
 ???
« Ostatnia zmiana: Czerwiec 22, 2010, 23:39:31 wysłana przez baranek »

Offline Anton Chigurh

  • Użytkownik

# Czerwiec 23, 2010, 00:17:12
Jeśli znasz choć jeden wymiar tablicy lub np. wiesz, że będzie ona kwadratowa, to możesz ukryć tablicę 2d przed xml-em a wystawić property 1d tłumaczące w getterze i setterze 2d <->1d. Choć najlepiej chyba w ogóle przejść na tablicę 1d i trzymać jeden z jej wymiarów jako dodatkowe pole klasy. Wtedy możesz udostępnić tę tablicę jako 2d poprzez publiczny interfejs (funkcja, lub jak wspomniał baranek - opakowanie + indekser) a dane - jak to dane - będą sobie siedziały w uproszczonej postaci.