在你看来,什么是更具可读性:??(经营者)或者使用的如果的
-
19-09-2019 - |
题
我有一个方法,该方法将会收到一个 string
, 但之前,我可以使用它,我把它 int
.有时可以 null
我必须改变它的价值 "0"
.今天我有:
public void doSomeWork(string value)
{
int SomeValue = int.Parse(value ?? "0"); //it can throw an exception(i know)
}
我做到了,但我老板叫我"重构"为:
public void doSomeWork(string value)
{
if(string.IsNullOrEmpty(value))
value = "0";
int SomeValue = int.Parse(value);
}
在你看来,什么是最好的选择吗?
解决方案
我个人会去你的老板的修正版本,如果字符串的空,你会像你说的抛出一个异常,因为“”不是很好格式化的数量和??只检查空。
是这样的:
public int doSomeWork(string value) {
int someValue = 0;
if (!string.IsNullOrEmpty(value)) {
Int.TryParse(value, out someValue);
}
}
一种能解决其中值等于“四十二”。
的问题其他提示
为什么不直接使用 TryParse()
?
public int doSomeWork(string stringValue)
{
int value;
int.TryParse(stringValue, out value);
return value;
}
上面的代码会返回 0
如果该值不是实际数字。
所以在我看来,我的例子是最具可读性的。我尝试解析 int 并返回它。不使用合并运算符,也不使用字符串方法。此方法还处理解析时可能引发的异常(除非您想要异常......)。
我觉得你最好的选择是做你的老板的话,这个人是不值得的!这就是说,加入了您的周围的几个空格,我喜欢它更好的。
int someValue = int.Parse(value ?? "0");
我肯定更喜欢空聚结操作者(??)在一系列的if语句。尤其是当你需要合并多个值,运营商的做法是更具可读性。这起着成的C#其它较新的功能,如λ表达式,LINQ糖语法等较少的代码有浑了实际intentful代码,更清晰的意图应/将是
为什么解析字符串“0”只是为了让整数值0?我绝对喜欢这样的:
public int doSomeWork(string value) {
int someValue;
if (String.IsNullOrEmpty(value)) {
someValue = 0;
} else {
someValue = Int32.Parse(value);
}
}
我重构想是这样的
public int doSomeWork(string value)
{
int result = 0; //default?
if(string.IsNullOrEmpty(value))
{
result = 0;
}
else
{
result = int.Parse(value); //you could also consider using TryParse(...) if your string could possibly also be different from a number.
}
//do some calculations upon "result"
return result;
}
目前,我正在读书 马丁*本书在重构 (想读它已经为一个更长的时间现在),这是什么我通常喜欢而且我发现这也是一个通常建议的"模式"的书。
的两个选项是不等价的。从在所述第二片段中的错误的部分(它应该读if(string.IsNullOrEmpty(value))
,它将处理两种情况下,空和空字符串,而操作者??
只处理空值。
一个部分从它的方式更具有可读性。我一边跟你的老板。
另一种解决方案是
INT someValue中= string.IsNullOrEmpty(值)? 0:int.Parse(值);
您第一片段将仅检查是否value == null
,但如果value == string.Empty || value == null
秒代码段的检查。我不知道你的方法的要求是什么,但这两个片段会做不同的事情。
其实你可以重构,以
VAR值= 0;结果 int.TryParse(yourString,超时值);
无论哪种方式,你总是有一个有效的整数(如果是这样的目标)
您可以做你的方式?酷!
如果肯定更可读的,除非大家比我更一个C#书呆子的。
在这种情况下,较早的是作为其一个简单的例子更具有可读性。 **然而,在你的情况下,他们是不等价的,作为?是不一样的string.IsNullOrEmpty **
,后者将在其中如果是复杂的情况下更好。我想说的课程马。只是取决于观众。尽量保持简单。
public int doSomeWork(string value)
{
return int.Parse(value ?? "0");
}
public int doSomeWork(string value)
{
if(value == null)
value = "0";
int SomeValue = int.Parse(value);
return SomeValue;
}
[只假设你需要检查空,而不是空字符串,也就像其他人指出]
两者之间的语义不同的是,??
是表达,而if
是一个语句。一种表达说“进行计算并返回结果”,正是你所寻求的语义。更多的工作也要做,以允许if
语句表达相同的语义;除此之外,if
余地比计算,房间就不需要更多的逻辑。
,因为它表达了我们所要的目的,您应该使用??
操作。