为了账号安全,请及时绑定邮箱和手机立即绑定

代码效率的问题

代码效率的问题

白猪掌柜的 2018-12-06 14:23:38
public static int ToInt(this string str, int defValue) { if (string.IsNullOrEmpty(str) || str.Trim().Length >= 11 || !Regex.IsMatch(str.Trim(), @"^([-]|[0-9])[0-9]*(\.\w*)?$")) return defValue; int rv; if (Int32.TryParse(str, out rv)) return rv; return  defValue; }    public static int ToInt(this object obj, int defValue) { if (object.Equals(obj, null) || !Regex.IsMatch(obj.ToString().Trim(), @"^([-]|[0-9])[0-9]*(\.\w*)?$")) return defValue; int rv; if (Int32.TryParse(obj.ToString(), out rv)) return rv; return defValue;} 这两个代码使用起来效率是不是一样的
查看完整描述

4 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

从绝对意义上来讲效率不一样。取决于执行逻辑、输入值等。
比较 object.Equals(object, null) 和 string.IsNullOrEmpty, object.Equals(object, object) 性能较差。
通过Reflector看反汇编:

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool Equals(object objA, object objB)
{
    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

如果用 obj == null 代替 object.Equals(object, null)则性能与string.IsNullOrEmpty相当。

假如用obj == null 直接比较,在 obj = string = "" 的情况下 (obj == null) 性能好于 string.IsNullOrEmpty(string). 原因不难理解,string.IsNullOrEmpty多了一个判断。

同样看一下string.IsNullOrEmpty反汇编的结果·
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}

it depends:)
 
有了TryParse 就用它吧~~

查看完整回答
反对 回复 2019-01-21
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

把你第一个if删掉效率最高

查看完整回答
反对 回复 2019-01-21
?
莫回无

TA贡献1865条经验 获得超7个赞

我想不通了。既然你已经知道TryParse这个函数了,干吗还加上那么多多余的?

查看完整回答
反对 回复 2019-01-21
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

就是啊,转化为整数就tryparse就可以了,连异常处理也可以不用加

查看完整回答
反对 回复 2019-01-21
  • 4 回答
  • 0 关注
  • 448 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信