我有一种方法可以将设备的 id 和设备显示的值作为输入。数据库包含该仪器的误差值和误差范围。我的方法拉出设备(连同它所有的数据),我还需要检查这个设备的指示,它是否在错误范围内,如果是,那么我从方法中返回错误值,如果不合适,则只是一个空字符串。问题是,告诉我,是否有可能以更短的方式实现它,所以我做到了。以及我是否正确检查了属于该范围的值并退出了该方法。
public static string GetInstrumentPogr(string id,string value)
{
//вытаскиваем из базы прибор по его id
var intrument = GetInstrumentById(id);
string insPorg = string.Empty; //финальный результат
if(intrument != null)
{
bool rezult = true;
double InnacuratyValue =Convert.ToDouble(intrument.Pogr);// значение погрешности
double ll = CalcModule.getLowerLimit(intrument.DiapPogr);// значение нижней границы диапазона
double ul = CalcModule.getUpperLimit(intrument.DiapPogr);// значение верхней границы диапазона
double val = Convert.ToDouble(value);// значение(показание прибора), которое подается на вод метода.
if (Math.Abs(val)>=ul && Math.Abs(val)>=ll)//попадает ли значение в диапазон
{
rezult=false;
}
if (rezult==true)
{
return insPorg = InnacuratyValue.ToString();//возвращаем значение погрешности для прибора
}
else
{
return insPorg=string.Empty;// пустую строку
}
}
return insPorg;//финальный результат
}
您可以简化条件并摆脱布尔变量,您仍然只在一个地方使用它。
我将提供我自己的、更全球化的解决这个问题的愿景:
1)您的方法至少做了两件事,即:
在你的位置,我会从方法中取出外部代码
var intrument = GetInstrumentById(id);并将工具本身传递给方法:string.Empty2)如果未找到工具且值不在范围内,则您的方法返回相同的结果 ( )。调用代码将如何理解究竟发生了什么(未找到工具或值超出范围)?3)
if (Math.Abs(val)>=ul && Math.Abs(val)>=ll)是绝对错误的检查。范围检查应为:if (val >= ll && val <= ul).4) 类本身
Instrument就是你的数据模型。这就是我所说的InstrumentDataModel。对于该工具,我会创建一个单独的类Instrument并将您的方法放入其中GetPogr。虽然出现了一个新类,但代码变得更加简洁易懂。现在 Instrument 类负责验证值,没有其他人负责。现在更容易使用所有这些:
当然,课程也会有缺点,但在第一阶段就足够了。
从方法中删除所有不必要的内容