2016-08-26 34 views
20

Ben .Net 4.6.2 bu kodu var ve şimdi Net çekirdek ancak alıyorum hata dönüştürmekIsGenericType & IsValueType .Net Çekirdek eksik?

Hata CS1061 'Tür' 'IsGenericType' ve hiçbir uzantı için bir tanım içermiyor çalışıyor türü 'Tip' bir ilk argüman kabul yöntemin 'IsGenericType' bulunamadı (bir kullanarak yönergesi veya bir derleme başvurusu eksik?)

public static class StringExtensions 
{ 
    public static TDest ConvertStringTo<TDest>(this string src) 
    { 
     if (src == null) 
     { 
      return default(TDest); 
     }   

     return ChangeType<TDest>(src); 
    } 

    private static T ChangeType<T>(string value) 
    { 
     var t = typeof(T); 

     // getting error here at t.IsGenericType 
     if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) 
     { 
      if (value == null) 
      { 
       return default(T); 
      } 

      t = Nullable.GetUnderlyingType(t); 
     } 

     return (T)Convert.ChangeType(value, t); 
    } 
} 

Net Çekirdek eşdeğer nedir? Ben kod hata ayıklama zaman Update1

Şaşırtıcı ben değişken bkz t ancak kodunda IsGenericType kullanamaz IsGenericType özelliğine sahiptir. Neden veya neden isim eklemem gerektiğinden emin değil. Ben using System ve using System.Runtime hem ad alanlarını

enter image description here

cevap

30

Evet, onlar yeni bir TypeInfo sınıfa Net Core taşınır ekledik. Bu çalışmayı elde etmenin yolu GetTypeInfo().IsGenericType & GetTypeInfo().IsValueType kullanarakdır.

using System.Reflection; 

public static class StringExtensions 
{ 
    public static TDest ConvertStringTo<TDest>(this string src) 
    { 
     if (src == null) 
     { 
      return default(TDest); 
     }   

     return ChangeType<TDest>(src); 
    } 

    private static T ChangeType<T>(string value) 
    { 
     var t = typeof(T); 

     // changed t.IsGenericType to t.GetTypeInfo().IsGenericType 
     if (t.GetTypeInfo().IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) 
     { 
      if (value == null) 
      { 
       return default(T); 
      } 

      t = Nullable.GetUnderlyingType(t); 
     } 

     return (T)Convert.ChangeType(value, t); 
    } 
} 
+2

@svick Diğer ad alanında GetTypeInfo() uzantısı yöntemi mi? intelisense bulamıyor – LP13

+4

Neden bana soruyorsun, ama evet, 'System.Reflection' içinde. – svick