[英]C# How to call function from generic code
我是C#的新手,正在尝试制作一个泛型类型调度程序(类似C ++),但是看起来我无法使用泛型参数调用函数:
样例代码:
class Program
{
static void Main(string[] args)
{
DoSomething(1);
}
static void DoSomething<T>(T value)
{
//error CS1503: Argument 1: cannot convert from 'T' to 'int'
DoSomethingElse(value);
}
static void DoSomethingElse(int a)
{
Console.Write("int\n");
}
static void DoSomethingElse(float a)
{
Console.Write("float\n");
}
}
能否请您解释一下为什么我不能叫DoSomethingElse
从DoSomething
? 如何将value
转发给接受该特定类型的另一个函数?
没有任何约束,仅允许您执行value
是对象类型时可以执行的活动。 您可以使用is
和as
关键字解决此问题。
如果添加where约束,例如where T : IComparable
,则允许使用满足约束的方法和属性。
即,使用IComparable约束,您可以调用value.CompareTo(x)
static void DoSomething<T>(T value)
{
if (value is int)
{
DoSomethingElse((value as int?).Value);
}
else if (value is float)
{
DoSomethingElse((value as float?).Value);
}
else
{
throw new Exception("No handler for type " + typeof(T).Name);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.