有没有办法从扩展方法获取泛型类型

本文关键字:方法 获取 泛型类型 扩展 有没有 | 更新日期: 2023-09-27 18:33:48

考虑这个方法:

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

直接从调用的类获取输入类型的东西。我对 C# 很陌生,我想知道这个问题。

有没有办法从扩展方法获取泛型类型

当泛型方法不返回任何内容时,可以省略该类型:

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