我想从第一类或第二类设置变量结果方法,它依赖于类型,我的代码有什么问题?
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";
}
}
答案 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();
}