.Net 4.6.2にこのコードがあり、.Netコアに変換しようとしていますが、エラーが発生します
エラーCS1061 'Type'には '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);
}
}
.Net Coreで同等のものは何ですか?
Update1
驚いたことに、コードをデバッグすると、変数t
にIsGenericType
プロパティがありますが、コードでIsGenericType
を使用できません。追加する必要がある理由または名前空間がわからない。私が追加しました using System
およびusing System.Runtime
両方の名前空間
はい、それらは.NetCoreで新しいTypeInfo
クラスに移動されます。これを機能させる方法は、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);
}
}