我正在尝试运行以下声明。
value = device.WeightLB == null ? string.Empty :
((GlobalVariables.MeasurementId == 1) ?
(FormatHelper.BuildDecimal(device.WeightKG) + Constants.KgUnit) :
(FormatHelper.BuildDecimal(device.WeightLB) + Constants.LbUnit));
预期:
如果MeasurementId
为1
,那么我应该在KG中获得结果。
问题:
如果MeasurementId
为1
,那么我的结果是Lb。
我是否错过了应该编写查询的序列(大括号序列)或其他错误?
Constants.KgUnit
将返回字符串kg和
Constants.LbUnit
将返回字符串lb
在调试期间,值为:
GlobalVariables.Measurementid == 1
device.WeightKG == 10
Constants.KgUnit == "kg"
device.WeightLB == 22.04
Constants.LbUnit == "lb"
需要帮助。
以上数值就是我得到的。
答案 0 :(得分:1)
请尝试使用以下代码:
if(device.WeightLB == null)
{
value = string.Empty;
}
else if(GlobalVariables.MeasurementId == 1)
{
value = FormatHelper.BuildDecimal(device.WeightKG) + Constants.KgUnit;
}
else
{
value = FormatHelper.BuildDecimal(device.WeightLB) + Constants.LbUnit;
}
答案 1 :(得分:0)
这段代码很多奇怪的东西,因为它的编写方式非常复杂,总是编写易于理解的代码即读给要维护代码的第三人。
value = device.WeightLB == null ? string.Empty :
((GlobalVariables.MeasurementId == 1) ?
(FormatHelper.BuildDecimal(device.WeightKG) + Constants.KgUnit) :
(FormatHelper.BuildDecimal(device.WeightLB) + Constants.LbUnit));
device.WeightLB == null
然后返回空字符串。但是如果你在device.WeightKG
(FormatHelper.BuildDecimal(device.WeightKG) + Constants.KgUnit))
中,除非你有device.WeightKG
//花了15分钟来理解你写的内容,并希望你明白我的观点。
为什么不以简单的方式做到这一点,通过这样做,你会得到你的答案,为什么你没有得到价值
if (device.WeightLB == null )
return string.Empty;
//this will not get execute when device.WeightLB == null
if( GlobalVariables.MeasurementId == 1)
return (FormatHelper.BuildDecimal(device.WeightKG) + Constants.KgUnit);
else
return (FormatHelper.BuildDecimal(device.WeightLB) + Constants.LbUnit);
答案 2 :(得分:0)
我发现即使MeasurementId = 1
检查WeightLB也很奇怪。也许这就是问题?
代码的作用已经解释,我在这里写的只是一个建议如何以更易读的方式编写它:
提取一个方法,只将权重转换为带有单位的字符串(如果可能)
private string Calculate(Device device)
{
if (device.WeightLB == null)
return string.Empty;
return GlobalVariables.MeasurementId == 1 ?
(FormatHelper.BuildDecimal(device.WeightKG) + Constants.KgUnit :
(FormatHelper.BuildDecimal(device.WeightLB) + Constants.LbUnit));
}
还可以做的是创建扩展以用流利的方式写作
private string Calculate(Device device)
{
if (device.WeightLB == null)
return string.Empty;
return GlobalVariables.MeasurementId == 1 ?
device.WeightKG.BuildDecimal().ToKgUnit():
device.WeightLb.BuildDecimal().ToLbUnit();
}
//Extension implementation
public static class MyExtensions
{
public static decimal BuildDecimal(this string value)
{
return FormatHelper.BuildDecimal(value);
}
public static string ToKgUnit(this decimal value)
{
return value+Constants.KgUnit;
}
public static string ToLbUnit(this decimal value)
{
return value+Constants.LbUnit;
}
}