2015-03-26 10 views
5

Dlaczego wydaje się, że ImmutableArray nie ma w pakiecie NuGet pakietu Microsoft Immutable Collections 1.0.34?Gdzie jest ImmutableArray?

enter image description here

+0

Prawdopodobnie nie ma publicznego konstruktora, a do jego budowy trzeba użyć metody fabrycznej. – leppie

+0

@leppie ma rację, ponieważ pojedyncze wyszukiwanie google wyświetli: https://msdn.microsoft.com/en-us/library/dn638264(v=vs.111).aspx?cs-save-lang=1&cs- lang = csharp # code-snippet-1, ale po prostu użyłbym tego: https://msdn.microsoft.com/en-us/library/dn628186(v=vs.111).aspx – Carsten

+0

Nie mogę znaleźć cała klasa. Chciałbym edytować post, aby usunąć "nowy" z obrazu, ale nie mogę znaleźć linku "edytuj" (może za mało reputacji lub po prostu nie jest to dzisiaj mój dzień :) – karl25233

Odpowiedz

7

ImmutableArray nie jest obecny w Twojej wersji biblioteki.

Jak widać w version history, o wydaniu dla 1.1.20 wzmianka „Re-dołączonego ImmutableArray <T>”

można znaleźć wyjaśnienie, dlaczego ImmutableArray był nieobecny w wersji 1.0 w sprawie. Blog NET, w tym announcement. (W skrócie - zespół Roslyn uzyskał zauważalną skuteczność przy próbie użycia tego typu zamiast zwykłych tablic, a zespół odpowiedzialny za bibliotekę nie był pewien, jak to naprawić, zachowując przy tym rozsądne API.)

Nowe wersje biblioteki znajdziesz w nowym pakiecie NuGet, System.Collections.Immutable.

N.B .: Według source code w nowych wersjach System.Collections.Immutable, mają najwyraźniej zdecydował się na uderzenie API - to znaczy, niektóre operacje na unitialized ImmutableArray rzuci zaskakująca NullReferenceException s. Oczywiście, należy ImmutableArray należy nigdy być tworzone z new. (Zamiast tego należy użyć ImmutableArray<T>.Empty)

+0

Interesujące informacje w ogłoszeniu, do którego się przyłączyłeś - dzięki! – karl25233

1

Z documentation:

public static class ImmutableArray 

ImmutableArray jest statyczny, więc nie można jej instancję. Użyj:

ImmutableArray.Create<T>(); // Creates an empty immutable array 
+0

Czy próbowałeś tego? Chodzi mi o to, że wydaje mi się, że nie ma tam całej klasy ImmutableArray. – karl25233

+0

Masz rację, @ ​​jean-hominal ma odpowiedź, dlaczego nie jest obecny. Też tęsknię za tym w moim pakiecie. Ale co do stworzenia, moja odpowiedź jest ważna. ;) – Alasjo

+1

Poza tym, że * możesz * utworzyć 'ImmutableArray ' z 'new ImmutableArray ' - ale jedyną, która może być utworzona w ten sposób, jest pusta. (Przypomnienie: każdy 'struct' definiuje konstruktor zerowych argumentów, którego nie można zmienić) –