0

我想设置取决于类型的第一类或第二类的可变结果方法,我的代码有什么问题?

    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";
        }
    }
4

2 回答 2

2

问题是编译器在编译时对类型一无所知,T并且无法确定其中包含的对象customClass有一个名为ClassOneMethodor的方法ClassTwoMethod。您有多种选择,例如从通用基类派生,覆盖虚拟方法或实现接口。

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

interface IHaveAMethod
{
    String GetString();
}

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

    return View();
}

public String GetValue<T>(T customClass) where T : IHaveAMethod
{
    return customClass.GetString();
}

class ClassOne : IHaveAMethod
{
    public String GetString()
    {
        return "ClassOneMethod";
    }
}

class ClassTwo : IHaveAMethod
{
    public String GetString()
    {
        return "ClassTwoMethod";
    }
}
于 2012-12-13T17:45:19.717 回答
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();
}
于 2012-12-13T17:49:26.770 回答