如何在某种情况下正确行动,方法中有许多条件,如果满足,则返回字典中的值。如果没有一个条件通过条件怎么办?类 - 数据模型:
public class SecondModel
{
public Dictionary<int, double> FirstDepartment { get; set; }
public Dictionary<int, double> SecondDepartment { get; set; }
public Dictionary<int, double> ThirdtDepartment { get; set; }
}
提供者
public class SecondManager
{
private SecondModel _model;
public enum Department
{
First,
Second,
Third
};
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public SecondManager()
{
_model = new SecondModel()
{
FirstDepartment = new Dictionary<int, double>(),
SecondDepartment = new Dictionary<int, double>(),
ThirdtDepartment = new Dictionary<int, double>()
};
_model.FirstDepartment.Add(1, 30.2);
_model.FirstDepartment.Add(2, 25.8);
_model.SecondDepartment.Add(3, 45.67);
_model.SecondDepartment.Add(4, 54.46);
}
double GetValuesByKey(Department department, int key)
{
if (department == Department.First && _model.FirstDepartment.ContainsKey(key))
return _model.FirstDepartment[key];
if (department == Department.Second && _model.SecondDepartment.ContainsKey(key))
return _model.FirstDepartment[key];
if (department == Department.Third && _model.ThirdtDepartment.ContainsKey(key))
return _model.ThirdtDepartment[key];
// Еcли ключа или направления не существует
return ???;
}
}
可以返回无穷大吗?
如果您直接回答问题,那么如果不是所有可能的选项之一没有得到满足,那么您需要抛出异常。其实这样的情况只在写程序的时候是不可能的,但是如果后来有人扩展
enum,那么在写的时候就已经出现了无法完全预见到的变种。但是,返回任何违反您方法语义的辅助值,例如null,double.Infinity或---不得返回此类秘密值。因此,在这种情况下,改变-1GetValuesByKey(Department department, int key)在
但是,在这种特殊情况下,我们成为了 Enum-Switch 反模式的人质(阅读更多关于 Habrahabr的文章(尽管有争议) )。您不能使用 Enum 来实现一个值列表,就其本质而言,这些值很容易发生变化。
例如,在植物界有12个部门。这不太可能在应用程序的生命周期内改变。而N公司今天有3个部门,明天又会扩员、缩编或人事改革,结果这些部门的组成和数量完全不同。
我不喜欢在这样的方法中堆积 ifs,我会编写和记录这样的代码。该方法的行为并不完全清楚