首页 > 解决方案 > 返回类型的泛型参数并执行操作

问题描述

是否可以在 C# 中对一般传递的参数执行操作?我创建了这个最小的示例来演示一个潜在的用例。

private T genericFormatterTest<T>(T x)
{
    if (Type.Equals(x, typeof(int)))
    {
        return (int)x * (int)x; //squared
    } else if (Type.Equals(x, typeof(string)))
    {
        return x.ToString()+"\n";
    }
    throw new InvalidCastException(); //or another suitable exception
}
...
int    squared =  genericFormatterTest<int>(5);
string newline =  genericFormatterTest<string>("hello");

标签: c#

解决方案


所以..以下代码有效并且是“通用的”

private T genericFormatterTest<T>(T x)
{
    if (typeof(T) == typeof(int))
    {
        return (T)(object)((int)(object)x * (int)(object)x); //squared
    }
    else
    {
        return (T)(object)(x + "\n");
    }
}

但这真的是你想要的吗?

此问答中使用的样本

使用相同的示例,您还可以对 T 引入约束,但它只是略微(并且可以说)减少了它的读取程度:

private T genericFormatterTest<T>(T x) where T: IConvertible
{
    if (typeof(T) == typeof(int))
    {
        return (T)(object)(Convert.ToInt32(x) * Convert.ToInt32(x)); //squared
    }
    else
    {
        return (T)(object)(x + "\n");
    }
}

推荐阅读