代码效率的问题

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;
}

这两个代码使用起来效率是不是一样的

白猪掌柜的
浏览 449回答 4
4回答

RISEBY

从绝对意义上来讲效率不一样。取决于执行逻辑、输入值等。比较 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 就用它吧~~

蓝山帝景

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

莫回无

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

繁星点点滴滴

就是啊,转化为整数就tryparse就可以了,连异常处理也可以不用加
打开App,查看更多内容
随时随地看视频慕课网APP