2015-09-08 6 views
10

मैं अपना ऐप (विंडोज 10 के लिए) को .NET मूल के अंतर्गत काम करने की कोशिश कर रहा हूं।.net-native enum.GetValues ​​परेशानी

मैं निम्नलिखित समस्या से अटक गया: Enum.GetValues मेटाडाटा गायब होने के साथ रनटाइम में विफल रहता है। मैं इस समस्या के लिए परीक्षण मामले को सरल बनाने में कामयाब रहा (वास्तविक जीवन में मेरा कोड अलग दिखता है)। पोर्टेबल पुस्तकालय में मेरे पास है:

public enum enumValues 
{   
    A1,  
    B1,   
    C1, 
} 

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

मैं निम्नलिखित कोड फोन मेरी यूनिवर्सल विंडोज ऐप्लिकेशन में:

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

मैं निम्न अपवाद प्राप्त करते हैं:

अतिरिक्त जानकारी: 'enumlibportable.enumValues [] 'मेटाडेटा गायब है।

समस्या यह है कि मुझे नहीं पता कि Default.rd.xml में क्या जोड़ना है। मैंने माइक्रोसॉफ्ट टूल http://go.microsoft.com/fwlink/?LinkID=392859 का उपयोग करके अलग-अलग rd स्ट्रिंग्स (एनम सबटाइप, एनमवेल्यूज क्लास, एनमवेल्यूज [] इत्यादि) जोड़ने की कोशिश की है, लेकिन कोई भाग्य नहीं था।

अद्यतन: मुझे पता है कि निम्नलिखित कोड मेरे testcase Enum.GetValues(typeof(enumValue)) के लिए काम करेंगे, लेकिन मैं अपने वास्तविक परियोजना में उपयोग नहीं कर सकते, क्योंकि मैं अपने वास्तविक परियोजना में सही enum प्रकार पता नहीं है।

+0

मैं वास्तविक कोड मान एक subclassing/इंटरफेस मामला है? क्या आप कृपया उस पर विस्तार से बता सकते हैं? – Nyerguds

+0

ठीक है, मेरी असली परियोजना को समझाने में बहुत लंबा समय है, इसलिए मैं समस्या का कारण ढूंढने और नमूना तैयार करने में काफी समय बिताता हूं। मैंने अच्छी तरह से मेरी समस्या का वर्णन किया। समस्या यह है कि ऑप्टिमाइज़ेशन enum मेटाडेटा को हटा देता है क्योंकि इसे स्पष्ट रूप से एप्लिकेशन में संदर्भित नहीं किया जाता है। मुझे संकलक को यह मेटाडेटा हटाने के लिए बताना नहीं है। –

+0

क्या आप वापसी प्रकार जेनेरिक नहीं बना सकते? – Herdo

उत्तर

0

हो सकता है आप इस मदद कर सकता है आप

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

मेरी वास्तविक परियोजना में मुझे सटीक प्रकार पता नहीं है और यह विभिन्न enum प्रकार हो सकता है, दुर्भाग्यवश, मैं इस दृष्टिकोण का उपयोग नहीं कर सकता। और यह एक उचित समाधान नहीं है, मुझे लगता है। अगर मैं कुछ नया enum जोड़ता हूं तो मुझे प्रत्येक enum के लिए यह कामकाज जोड़ना होगा। यह किसी भी तरह रनटाइम परिभाषाओं के माध्यम से किया जाना चाहिए। –

5

यह मेरे लिए कोई मतलब नहीं है की कोशिश कर सकते हैं, लेकिन निम्नलिखित आरडी स्ट्रिंग मेरी testcase के लिए काम किया:

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

एक चीज जो उपयोगी है अत्यधिक उदार निर्देश का उपयोग करना है: <विधानसभा नाम = "* एप्लिकेशन *" गतिशील = "आवश्यक सभी" />। यह आपके आवेदन के सभी प्रकारों को पर्याप्त जानकारी देगा ताकि इस प्रकार का प्रतिबिंब काम करेगा। यह बहुत अच्छी तरह से काम करता है, यह रिक्त UWP टेम्पलेट में गुण \ Default.rd.xml के अंतर्गत शामिल है! एचटीएच –

+0

मुझे अपनी परियोजना में यह लाइन मिली, यह वहां <विधानसभा नाम = "* एप्लिकेशन *" गतिशील = "आवश्यक सभी" /> था और यह मेरे मामले में काम नहीं करता है। मुझे संदेह है कि यह .NET मूल में एक बग है। –

संबंधित मुद्दे