c# - 有没有办法从扩展方法中获取通用类型?

标签 c# extension-methods generic-programming

考虑这个方法:

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

它将知道基本类型和输出类型,而无需明确命名它们。

关于c# - 有没有办法从扩展方法中获取通用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261958/

相关文章:

c# - 在 C#/ASP.NET 中销毁静态变量

c# - 在没有显式引用的情况下调用方法的扩展方法

c# - 如何将类型 int[] 转换为 int?[]

c# - 为什么这个通用扩展方法不能编译?

scala - 使用泛型类型关闭数据路径中的逻辑(Chisel)

c++ - 通过 T * 匹配 nullptr

c# - 如何检查程序是否运行以及用户是否存在?

c# - 用于常见 REST API 错误代码的 Azure 存储 API

c++ - 使用一个参数初始化 boost::hana::tuple

c# - Windows Phone 8.1 连接到蓝牙智能心率监测器