c# - porque - IsGenericType & IsValueType no se encuentra en.Net Core?
desventajas de de net core (1)
Sí, se mueven en .Net Core a una nueva clase de TypeInfo
. La forma de hacer que esto funcione es mediante el uso de 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);
}
}
Tengo este código en .Net 4.6.2 y ahora trato de convertirlo en .Net core, sin embargo, estoy recibiendo un error
Error CS1061 ''Tipo'' no contiene una definición para ''IsGenericType'' y no se puede encontrar un método de extensión ''IsGenericType'' que acepte un primer argumento de tipo ''Tipo'' (¿falta una directiva de uso o una referencia de ensamblaje?)
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);
}
}
¿Qué es equivalente en .Net Core?
Update1
Sorprendentemente, cuando depuro el código, veo que la variable t
tiene la propiedad IsGenericType
, sin embargo, no puedo usar IsGenericType
en el código. No estoy seguro de por qué o qué espacio de nombres necesito agregar. He añadido el using System
y el using System.Runtime
ambos espacios de nombres