泛型方法 - 调用方法不同的类

时间:2012-12-13 17:39:05

标签: c# asp.net-mvc

我想从第一类或第二类设置变量结果方法,它依赖于类型,我的代码有什么问题?

    public ActionResult Contact()
    {
        ViewBag.Message = GetValue(new ClassOne(), "classOne");

        return View();
    }



    public string GetValue<T>(T customClass, string type)
    {
        if (type == "classOne") return customClass.ClassOneMethod();
        else customClass.ClassTwoMethod();
    }

    class ClassOne
    {
        public string ClassOneMethod()
        {
            return "ClassOneMethod";
        }
    }

    class ClassTwo
    {
        public string ClassTwoMethod()
        {
            return "ClassTwoMethod";
        }
    }

2 个答案:

答案 0 :(得分:2)

问题是编译器在编译时对类型T一无所知,并且无法确定customClass中包含的对象是否有一个名为ClassOneMethod或{{1}的方法}}。您有多个选项,例如从公共基类派生,覆盖虚拟方法或实现接口。

这里有一些关于如何使用界面进行操作的提示。这远非完美,但我试图将它与原始代码保持一致。

ClassTwoMethod

答案 1 :(得分:2)

您的代码不起作用,因为您的类没有相同的定义。您可以像这样更改代码以使代码运行:

public ActionResult Contact()
{
    ViewBag.Message = GetValue<MyInterface>(new ClassOne());
    return View();
}

public string GetValue<T>(T customClass, string type)
{
    return customClass.MyMethod
}

class ClassOne : IMyInterface
{
    public string MyMethod()
    {
        return "ClassOneMethod";
    }
}

class ClassTwo : IMyInterface
{
    public string MyMethod()
    {
        return "ClassTwoMethod";
    }
}

public Interface IMyInterface
{
    string MyMethod();
}