有没有办法从扩展方法中获取通用类型?
Is there a way to get the Generic Type from an Extension method?
考虑这个方法:
public static TResult CastTo<T, TResult>(this T arg)
{
TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T));
bool? converter = typeConverter?.CanConvertTo(typeof(TResult));
if (converter != null && converter == true)
return (TResult)typeConverter.ConvertTo(arg, typeof(TResult));
else
return default(TResult);
}
有没有办法从扩展方法中设置通用类型,我的意思是,而不是调用:
string s = "1";
s.CastTo<string, int>();
直接从呼叫者 class 获取输入类型的东西。我是 C# 的新手,我想知道这个问题。
使用对象类型:
public static TResult CastTo<TResult>(this object arg)
{
TypeConverter typeConverter = TypeDescriptor.GetConverter(arg.GetType());
bool? converter = typeConverter.CanConvertTo(typeof(TResult));
if (converter != null && converter == true)
return (TResult)typeConverter.ConvertTo(arg, typeof(TResult));
else
return default(TResult);
}
当你的泛型方法returns什么都没有时,你可以省略类型:
public static void CastTo<T, TResult>(this T arg, out TResult var)
{
TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T));
bool? converter = typeConverter?.CanConvertTo(typeof(TResult));
if (converter != null && converter == true)
var = (TResult)typeConverter.ConvertTo(arg, typeof(TResult));
else
var = default(TResult);
}
你可以这样使用它:
string s = "1";
int i;
s.CastTo(out i);
它将知道基本类型和输出类型,而无需明确命名它们。
考虑这个方法:
public static TResult CastTo<T, TResult>(this T arg)
{
TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T));
bool? converter = typeConverter?.CanConvertTo(typeof(TResult));
if (converter != null && converter == true)
return (TResult)typeConverter.ConvertTo(arg, typeof(TResult));
else
return default(TResult);
}
有没有办法从扩展方法中设置通用类型,我的意思是,而不是调用:
string s = "1";
s.CastTo<string, int>();
直接从呼叫者 class 获取输入类型的东西。我是 C# 的新手,我想知道这个问题。
使用对象类型:
public static TResult CastTo<TResult>(this object arg)
{
TypeConverter typeConverter = TypeDescriptor.GetConverter(arg.GetType());
bool? converter = typeConverter.CanConvertTo(typeof(TResult));
if (converter != null && converter == true)
return (TResult)typeConverter.ConvertTo(arg, typeof(TResult));
else
return default(TResult);
}
当你的泛型方法returns什么都没有时,你可以省略类型:
public static void CastTo<T, TResult>(this T arg, out TResult var)
{
TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T));
bool? converter = typeConverter?.CanConvertTo(typeof(TResult));
if (converter != null && converter == true)
var = (TResult)typeConverter.ConvertTo(arg, typeof(TResult));
else
var = default(TResult);
}
你可以这样使用它:
string s = "1";
int i;
s.CastTo(out i);
它将知道基本类型和输出类型,而无需明确命名它们。