C# TryGetValue


在寫的代碼中遇到這樣的一段Code

   [Route("api/[controller]/[action]")]
    [ApiController]
    public class JDOrderController : ControllerBase
    {
        [HttpPost]////倉庫實物庫存查詢
        public async Task<IActionResult> Stock_queryStock(string method2)
        {
               IActionResult result = null;           
                //RouteData:Gets the Microsoft.AspNetCore.Routing.RouteData for the executing action
//得到Microsoft.AspNetCore.Routing.RouteData用於執行操作
//
Values: Gets the values produced by routes on the current routing path.
//獲取由當前路由路徑上的路由生成的值。
//value 存的是一個dic的鍵值對里面是有controller和action,而且程序執行到這里,里面都有存值:JdOrder和Stock_QueryStock
//tryGetValue返回時的bool值,有值就是true.
//同時這里也考察了下這個Out的用法,將參數帶進去,改變參數的值以后再帶出來
                bool b=   RouteData.Values.TryGetValue("controller", out object controllerName);
                bool bb = RouteData.Values.TryGetValue("action", out object actionName);
                //
                string controller = controllerName.ToString();
                string action= actionName.ToString();
                string Content = RequestInfo(method, MethodCont);
                result = new ContentResult()
                {
                    ContentType = "application/json",
                    Content = JsonConvert.SerializeObject(Content)
                };
                 return result;
       }              
     }

這個TryGetValue,百度了一圈是跟Dictionary有關的

關於Dictionary.TryGetValue的個人理解記錄

如果字典中不含有指定key,out value會返回一個適當的默認值。
Dictionary<TKey, TValue>.TryGetValue Method (TKey, TValue)
判斷字典中是否含有TKey,如果含有,則TValue返回TKey的值,否則返回一個合適的默認值,比如0/false/null

(bool)(UserFields.TryGetValue(fieldName, out finfo))可將其轉為boo類型,
它方便的是避免了判斷key知否存在而引發“ 給定關鍵字不在字典中。”的錯誤。
可以通過下面的測試來更進一步了解:

static void Main(string[] args)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("aaa", "123");
            dic.Add("bbb", "456");
            dic.Add("ccc", "789");
            dic.Add("ddd", "321");

            //獲取與指定的鍵相關聯的值,
            //雖然這里給ourStr已經是賦值了的,但是執行到dic的時候,就是會去找鍵:'aaa'的值,找到了outStr就是值,找不到就是null值
            string outStr = "999";
            //上面的dic中並沒有ttt,所以下面的outStr會是NULL值,
            //是避免了判斷key知否存在而引發"給定關鍵字不在字典中."的錯誤。
            dic.TryGetValue("ttt", out outStr);          

            Console.WriteLine(outStr + "<br />");
            dic.TryGetValue("bbb", out outStr);
            Console.WriteLine(outStr + "<br />");      

            Console.ReadKey();
        }

 

string outStr = "999";
//上面的dic中並沒有ttt,所以下面的outStr會是NULL值,
//是避免了判斷key知否存在而引發"給定關鍵字不在字典中."的錯誤。
dic.TryGetValue("ttt", out outStr);
dic.TryGetValue("ttt", out string str);
關於out的兩種聲明都是一樣的
無論是在參數外聲明,還是在參數內聲明都是ok的

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM