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