2015-09-08 6 views
10

Ich versuche, meine app (für Windows 10) arbeiten unter .NET heimisch zu machen..net-native enum.GetValues ​​Probleme

habe ich mit folgendem Problem stecken: Enum.GetValues nicht zur Laufzeit mit Metadaten fehlen. Ich habe es geschafft, den Testfall für dieses Problem zu vereinfachen (im wirklichen Leben sieht mein Code anders aus). In tragbaren Bibliothek habe ich:

public enum enumValues 
{   
    A1,  
    B1,   
    C1, 
} 

public class fff 
{ 
    public static object GetClass2Value() 
    { 
     return enumValues.B1; 
    } 
} 

In meinem Universal-Windows-Anwendung ich den folgenden Code aufrufen:

Array aaa = Enum.GetValues(fff.GetClass2Value().GetType()); 

ich die folgende Ausnahme:

Zusätzliche Informationen: ‚enumlibportable.enumValues [] 'fehlen Metadaten.

Das Problem ist, dass ich keine Ahnung habe, was zu Default.rd.xml hinzugefügt werden soll. Ich habe versucht, verschiedene Rd-Zeichenfolgen (enum Subtype, enumValues-Klasse, enumValues ​​[] usw.) mit Microsoft-Tool http://go.microsoft.com/fwlink/?LinkID=392859 hinzufügen, hatte aber kein Glück.

UPDATE: Ich weiß, dass der folgende Code wird Enum.GetValues(typeof(enumValue)) für meinen Testfall arbeiten, aber ich kann es nicht in meinem realen Projekt verwenden, da ich weiß nicht, den genauen Enum-Typen in meinem realen Projekt.

+0

Ich gehe davon aus, den echten Code ist ein Unterklassen-/Interface-Fall? Können Sie das bitte etwas näher ausführen? – Nyerguds

+0

Nun, es ist zu lang, um mein wirkliches Projekt zu erklären, deshalb verbringe ich viel Zeit damit, die Ursache des Problems zu finden und die Probe vorzubereiten. Ich habe mein Problem gut genug beschrieben. Das Problem besteht darin, dass die Optimierung die Enum-Metadaten löscht, da sie in der Anwendung nicht explizit referenziert wird. Ich muss dem Compiler mitteilen, dass er diese Metadaten nicht löschen soll. –

+0

Können Sie nicht den Rückgabetyp generisch machen? – Herdo

Antwort

0

Vielleicht können Sie versuchen, diese helfen können Sie

Array aaa = (enumValues) Enum.Parse(typeof(enumValues), fff.GetClass2Value()); 
+0

In meinem realen Projekt kenne ich den genauen Typ nicht und es könnten verschiedene Enum-Typen sein, diesen Ansatz kann ich leider nicht verwenden. Und das ist keine richtige Lösung, denke ich. Wenn ich eine neue Enumeration hinzufüge, muss ich diese Problemumgehung für jede Enumeration hinzufügen. Dies sollte irgendwie durch Laufzeitdefinitionen geschehen. –

5

Es ist nicht für mich Sinn machen, aber das folgende RD-String arbeitete für meinen Testfall:

<Type Name="enumlibportable.enumValues[]" Browse="Required All"/> 
+0

Eine Sache, die nützlich ist, ist die übergroße Direktive zu verwenden: . Dadurch erhalten alle Typen in Ihrer Anwendung genügend Informationen, so dass eine Reflektion dieses Typs funktioniert. Es funktioniert so gut, es ist in der leeren UWP-Vorlage unter Properties \ Default.d.xml enthalten! HTH –

+0

Ich fand diese Zeile in meinem Projekt, es war dort und es funktioniert nicht in meinem Fall. Ich vermute, dass dies ein Fehler in .NET ist. –