2016-08-26 10 views
20

私はネット4.6.2でこのコードを持っているし、今しかし、私はエラーIsGenericType&IsValueTypeが.Netコアから抜けていますか?

エラーCS1061「種類」が「IsGenericType」 と拡張子なしの定義が含まれていません取得しています。ネットコアに変換しようとしています 「type」型の最初の引数を受け取る方法「IsGenericType」は見つけることができる(あなたがusingディレクティブまたは アセンブリ参照が不足している?)

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); 
    } 
} 

はネットコアで同等とは何ですか?私は、コードをデバッグするときにアップデート1

は、驚くべきことに、私は、変数を参照tは、しかし、私はコードでIsGenericTypeを使用することはできませんIsGenericType性質を持っています。なぜ、またはどの名前空間を追加する必要があるのか​​不明です。私は両方の名前空間

enter image description here

答えて

30

はい、彼らは新しいTypeInfoクラスには、.NETのコアに移動させてusing Systemusing System.Runtimeを追加しました。この作業を行う方法は、GetTypeInfo().IsGenericType & GetTypeInfo().IsValueTypeを使用することです。

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他の名前空間の 'GetTypeInfo()'拡張メソッドはありますか? intelisenseはそれを見つけることができません – LP13

+4

なぜあなたは私に尋ねているのですか?はい、それは 'System.Reflection'です。 – svick

関連する問題