在case语句中返回不同的对象类型?

时间:2019-04-25 12:50:19

标签: c# json object json.net

如何在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;
            ..... 
        }
    }

我需要创建一个抽象/接口类来完成此操作吗?一个很好的例子。

3 个答案:

答案 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 { }
}

或者,您可以执行某种形式的继承链并使用泛型。

附加:Documentation on Interfaces

答案 2 :(得分:0)

您可以执行以下操作: public IVehicle CreateObjectType(JToken token) 要么 public dynamic CreateObjectType(JToken token)

记住几乎所有的dymanic都需要花费更多的时间来运行和编译。