亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

代碼效率的問題

代碼效率的問題

白豬掌柜的 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 關注
  • 473 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號