如何在case语句中返回不同的对象类型?
public object?? CreateObjectType(JToken token)
{
switch (token["type"].Value<string>())
{
case "Car":
var Car = new Car();
return car;
case "Boat":
var boat = new Boat();
return boat;
.....
}
}
我需要创建一个抽象/接口类来完成此操作吗?一个很好的例子。
答案 0 :(得分:4)
好像您正在实现基本的factory method pattern:
public interface IVehicle {}
public class Car : IVehicle {}
public class Boat : IVehicle {}
public IVehicle CreateObjectType(JToken token)
{
switch (token["type"].Value<string>())
{
case "Car":
return new Car();
case "Boat":
return new Boat();
default:
throw new ArgumentOutOfRangeException(nameof(token));
}
}
答案 1 :(得分:4)
解决此问题的最简单方法是使用界面(在我看来):
using System;
namespace Test
{
public class Test
{
public IVehicle CreateObjectType(JToken token)
{
switch(token["type"].Value<string>())
{
case "Car":
return new Car();
case "Boat":
return new Boat();
default:
throw new NotImplementedException();
}
}
}
public class Boat : IVehicle { }
public class Car : IVehicle { }
public interface IVehicle { }
}
或者,您可以执行某种形式的继承链并使用泛型。
答案 2 :(得分:0)
您可以执行以下操作:
public IVehicle CreateObjectType(JToken token)
要么
public dynamic CreateObjectType(JToken token)
。
记住几乎所有的dymanic
都需要花费更多的时间来运行和编译。