Vraag Hashtable en Arraylist nodig


Ik probeer C # -klassen van iemand anders te gebruiken in mijn Windows 7 Phone-app. De klassen gebruiken objecten van het type hashtabel.

Het bestand in kwestie heeft

using System.Collections;

aan de bovenkant, dus ik neem aan dat dit het Hashtable-object is dat het wil.

Wanneer ik probeer om mijn oplossing te bouwen, krijg ik fouten die het type of de naamruimte 'Hashtable' niet kunnen vinden. Mis je een gebruikende richtlijn of assemblyverwijzing.

In de documentatie van Microsoft van hashtable, ik zie het zegt Assembly: mscorlib

Maar als ik mscorlib probeer toe te voegen via Project> Referentie toevoegen, zegt VS dat het dit niet kan toevoegen omdat er automatisch naar wordt verwezen door het buildsysteem.

Wat mis ik?


10
2018-02-16 00:27


oorsprong


antwoorden:


De niet-generieke collecties, inclusief ArrayList en HashTable, zijn niet opgenomen in Silverlight.
Deze klassen zijn overboekingen van .Net 1.0 (die geen generieke gegevens bevatten) en mogen niet in nieuwe code worden gebruikt.

Gebruik in plaats daarvan de generieke collecties-List<T> en Dictionary<TKey, TValue>.


27
2018-02-16 00:32



Je hebt een paar opties:

  1. Wijzig uw invoer in using System.Collections.Generic; en verander elk gebruik van een HashTable naar Dictionary<> en ArrayList naar List<>.

  2. U macht in staat zijn om weg te komen met:

    using HashTable = System.Collections.Generic.Dictionary<object, object>;
    using ArrayList = System.Collections.Generic.List<object>;
    Merk op dat elke toekomstige onderhouder je zal haten om dit te doen.

  3. Maar het is beter om de code te refactoren om de generieke collecties correct te gebruiken.

  4. Maak een klas Hashtable in een naamruimte System.Collections, implementeren IDictionary<object, object> door alles naar een innerlijk door te sturen Dictionary<object, object> en implementeren van de nodige gedragsveranderingen (vergrendeling, ontbrekende toetsen, enz.); Creëer een ArrayList door inkapseling List<object>. (voorgesteld door henon)


10
2018-02-16 00:35



Er zijn verschillende mscorlibs afhankelijk van welk .NET-framework u gebruikt. Als u in de vervolgkeuzelijst "Andere versies" op de MSDN-pagina kijkt, ziet u Hashtable is geen onderdeel van Silverlight. U moet een a gebruiken Dictionary<Object, Object> (of bij voorkeur sterkere getypte toetsen en waardetypen)

Hashtable is not in Silverlight

But Dictionary is


2
2018-02-16 00:30



System.Collection is een erfenis van de eerste versie van .Net - geen generieke types.

Gebruik de Dictorany-klasse die van nature een hashtabel is, om je code te corrigeren en List insted van ArrayList.


1
2018-02-16 00:35



Het werkte voor mij aan het veranderen:

Hashtable voor Dictionary<object, object>

NameValueCollection voor Dictionary<object, object>

Een ander probleem dat ik tegenkwam is Encoding. ASCII is ook niet gedefinieerd, ik heb dat gesorteerd met een functie die een stack-flow-student schreef:

public static byte[] StringToAscii(string s) {
    byte[] retval = new byte[s.Length];
    for (int ix = 0; ix < s.Length; ++ix) {
        char ch = s[ix];
        if (ch <= 0x7f) retval[ix] = (byte)ch;
        else retval[ix] = (byte)'?';
    }
    return retval;
}

credits hier:

ASCIIEncoding In Windows Phone 7

Dus uiteindelijk om de ASCII terug te sturen, is dit wat je moet doen:

return StringToAscii (Encoding.Unicode.GetString (result.ToArray ()));


0
2017-09-24 12:14