繁体   English   中英

使用类型为DataType的通用方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM