首页 > 解决方案 > 如何使用不同的方法编写代码

问题描述

我有以下功能

 public static MyMainFunc(string nameOfCar)
 {
      string getNameOfCar = returnedNameOfCar(nameOfCar)
      string tyreNameOfCar= returnTyreNamesForCar(nameOfCar)
        // more logic 
 }

这是returnNameOfCar的函数

  private static string returnNameOfCar(string carName)
    {
        string carName= "";
        if (carName== CarCollection.Audi.ToString())
        {
            carName= "Audi X";
        }
        else if (carName== CarCollection.BMW.ToString())
        {
            carName= "BMW Y";
        }

        return carName;
    }

我将有另一个名为returnTyreNamesForCar的函数返回一些不同的代码

private static string returnTyreNamesForCar(string carName)
    {
        string tyreName= "";
        if (carName== CarCollection.Audi.ToString())
        {
            tyreName= "Ceat";
        }
        else if (carName== CarCollection.BMW.ToString())
        {
            tyreName= "ABCD";
        }

        return tyreName;
    }

您可以看到函数returnNameOfCar和 **returnTyreNamesForCar ** 中的代码重复了。知道如何改进代码吗?

更新

CarCollection 是枚举

    public enum CarCollection
{
    None = 0,
    Audi = 10,
    BMW = 11        
}

标签: c#

解决方案


创建一个名为 Car 的类。

向您的类添加一个静态Dictionary<CarCollection, Car>字段。

从该类创建实例,用相关细节填充它,将它们放入字典中。

向该类添加一个名为 GetCar 的静态成员,该成员将接收 的成员CarCollection并从字典中返回相关汽车:

class Car
{
    private static Dictionary<CarCollection, Car> _availableCars = 
        new Dictionary<CarCollection, Car>()
        {
             {CarCollection.Audi, new Car("Ceat", "Audi X")},
             {CarCollection.BMW, new Car("ABCD", "BMW Y")},
        }

    static Car GetCar(CarCollection carName)
    {
        if(_availableCars.TryGetValue(carName, out var car))
        {
            return car;
        }
        // or throw an exception or something like that.
        return null; 
    }

    // Private constructor - 
    // don't let an outsider create an instance that's not in the dictionary.
    private Car(string tyreName, string carName)
    {
        TyreName = tyreName,
        CarName = carName
    }

    public string TyreName {get;}
    public string CarName {get;}
}

如果你愿意,你可以让汽车属性读/写,所以任何使用这个代码的人都可以为它们设置不同的值。


推荐阅读