2015-09-08 10 views
10

Uygulamamı (Windows 10 için) .NET native altında çalışmayı deniyorum..net-native enum.GetValues ​​sorunu

Aşağıdaki sorunla uğraştım: Meta verili çalışma zamanında Enum.GetValues başarısız oluyor. Bu sorun için test durumunu basitleştirmeyi başardım (gerçek hayatta kodum farklı görünüyor). Taşınabilir kütüphanesinde ı vardır:

public enum enumValues 
{   
    A1,  
    B1,   
    C1, 
} 

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

Aşağıdaki kodu aramak benim Evrensel, Windows uygulamasında:

Ek bilgi: Aşağıdaki özel durum almak

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

'enumlibportable.enumValues [] 'meta verileri eksik.

Sorun şu ki, Default.rd.xml dosyasına ne ekleneceğini bilmiyorum. Microsoft tool http://go.microsoft.com/fwlink/?LinkID=392859'u kullanarak farklı rd dizeleri (enum subtype, enumValues ​​sınıfı, enumValues ​​[] vb.) Eklemeyi denedim, ancak şansım yoktu.

GÜNCELLEME: Aşağıdaki kodu benim testcase Enum.GetValues(typeof(enumValue)) için çalışacağını biliyorum, ama benim gerçek projede tam enum türü bilmiyorum çünkü benim gerçek projesinde kullanmak mümkün değil.

+0

Gerçek kod varsayalım bir alt sınıflandırma/arabirim vakası mıdır? Lütfen biraz detaylandırır mısın? – Nyerguds

+0

Gerçek projemi açıklamak için çok uzun, bu yüzden sorunun nedenini bulmak ve örnek hazırlamak için çok zaman harcıyorum. Sorunumu yeterince iyi tanımladım. Sorun, uygulamada açıkça başvurulmadığından optimizasyonun enum meta verilerini silmesidir. Derleyiciye bu meta verileri silmemesini söylemem gerekir. –

+0

Dönüş türünü genel yapamaz mısınız? – Herdo

cevap

0

bunu yapabileceğinden

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

Gerçek projemde, kesin tipini bilmiyorum ve farklı enum türleri olabilir, maalesef bu yaklaşımı kullanamam. Ve bu uygun bir çözüm değil bence. Yeni bir enum eklersem, her bir enum için bu geçici çözümü eklemem gerekecek. Bu, çalışma zamanı tanımları yoluyla bir şekilde yapılmalıdır. –

5

Bana mantıklı değil yardımcı olabilir deneyebilirsiniz olabilir, ancak aşağıdaki RD dize benim testcase çalıştı:

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

Kullanışlı olan bir şey aşırı cömert yönergeyi kullanmaktır: . Bu, uygulamanızdaki tüm türlerin yeterli bilgiye sahip olmasını sağlayacak ve böylece bu tür yansımaların çalışması sağlanacaktır. Çok iyi çalışıyor, Properties \ Default.rd.xml altında boş UWP şablonuna dahil edildi! HTH –

+0

Projemde bu satırı buldum, oradaydı ve benim durumumda çalışmıyor. Bu, .NET yerel bir hata olduğundan şüpheleniyorum. –