返回类型的通用参数并执行操作

时间:2019-11-26 10:44:08

标签: c#

是否可以对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");

1 个答案:

答案 0 :(得分:2)

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

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

但这真的是您想要的吗?

来自this Q&A

的使用的样本

使用相同的示例,您还可以对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");
    }
}