[英]Use Generic Method With Type DataType
这是ITest界面:
public interface ITest
{
Type ReturnType { get; }
Object MyMethod(params object[] args);
}
和测试类:
public class Test: ITest
{
public Type ReturnType { get { return typeof(long); } }
public Object MyMethod(params object[] args)
{
long sum = 0;
foreach(object arg in args)
{
sum += (long)arg;
}
return sum;
}
}
所以我需要一个方法,自动转换ITest
方法的结果与ReturnType
类型。
我觉得这样的事情:
public T Transform<T>(Type T, object result)
{
return (T)result;
}
并使用像这样:
Test test = new Test();
long result = Transform(test.ReturnType, test.MyMethod(1,2,3,4));
但你也知道,我不能使用普通的方法就是这样,我不想显式声明的返回类型是这样的:
long result = Transform<long>(test.MyMethod(1,2,3,4));
有什么建议吗?
如果没有反思,你所要求的正是这样。
您可以将ITest标记为Generic
,从此一切都变得简单。
public interface ITest<T>
{
Type ReturnType { get; }//redundatnt
T MyMethod(params object[] args);
}
public class Test : ITest<long>
{
public Type ReturnType { get { return typeof(long); } }//redundatnt
public long MyMethod(params object[] args)
{
long sum = 0;
foreach (object arg in args)
{
long arg1 = Convert.ToInt64(arg);
sum += arg1;
}
return sum;
}
}
Test test = new Test();
long result = test.MyMethod(1,2,3,4);//No transform nothing, everything is clear
反思是必需的,但重要的是这种方法是非常值得怀疑的,并且不是100%可能的,因为你不能将object
转换为long
。 尝试运行以下内容:
static void Main()
{
int i = 1;
object o = i;
long l = (long)o;
}
正如Sriram所证明的那样,可以实现类型特定的方法,但我认为这会破坏你的问题/设计的目的。 简单地使用不同参数类型(即int [],long []等)的重载方法也更容易,这有利于确保转换不会抛出异常。
正如@nawfal所说,你可以使用ITest作为Generic:
public interface ITest<T>
{
T MyMethod(params object[] args);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.