out使用陷阱
using System;
using System.Collections.Generic;
namespace BasicTest
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> fruits = new Dictionary<string, string> { { "a", "apple" }, { "b", "banana" }, { "c", "cherry" } };
foreach (var item in fruits)
{
Console.WriteLine("fruits Before:");
Console.WriteLine($"key:{item.Key},value:{item.Value}");
Console.WriteLine("\n");
}
fruits.TryGetValue("b", out var fruitName);
fruitName = "blueberry"; // 等效于fruitName = new string("blueberry".ToCharArray()); 不等效于fruits["b"] = "blueberry"
//fruits["b"] = "blueberry"; //这个与上面一行有本质区别
foreach (var item in fruits)
{
Console.WriteLine("fruits After:");
Console.WriteLine($"key:{item.Key},value:{item.Value}");
Console.WriteLine("\n");
}
Dictionary<string, Dictionary<string, long>> projectsVersoins = new Dictionary<string, Dictionary<string, long>>();
Dictionary<string, long> fooVersion = new Dictionary<string, long>
{
{ "test",123 },
{ "qa",456},
{ "uat",789},
{ "stage",147},
{ "product",258}
};
Dictionary<string, long> barVersion = new Dictionary<string, long>
{
{ "test",369 },
{ "qa",159},
{ "uat",357},
{ "stage",951},
{ "product",753}
};
projectsVersoins.Add("naruto", fooVersion);
projectsVersoins.Add("sasuke", barVersion);
Dictionary<string, long> projectVersions = new Dictionary<string, long>
{
{ "test",999 }, // 999 > 123
{ "qa",456},
{ "uat",789},
{ "stage",147},
{ "product",258}
};
foreach (var item in projectsVersoins["naruto"])
{
Console.WriteLine("ProjectVersion Before:");
Console.WriteLine($"key:{item.Key},value:{item.Value}");
Console.WriteLine("\n");
}
if (!projectsVersoins.TryGetValue("naruto", out var oriProjectVersions))
{
Console.WriteLine("本测试代码不应该跑到这里,否则请查看代码");
}
oriProjectVersions["test"] = 999; //这个等效于projectsVersoins["naruto"]["test"] = newVer.Value;
//fruitName.[0] = 'c';
//fruitName = "clueberry";
//oriProjectVersions = new Dictionary<string, long>();
//fruitName = new string("blueberry".ToCharArray());
//foreach (var newVer in projectVersions)
//{
// if (!oriProjectVersions.TryGetValue(newVer.Key, out var ver) || newVer.Value > ver)
// {
// oriProjectVersions[newVer.Key] = newVer.Value;
// //projectsVersoins["naruto"][newVer.Key] = newVer.Value;
// }
//}
foreach (var item in projectsVersoins["naruto"])
{
Console.WriteLine("ProjectVersion After:");
Console.WriteLine($"key:{item.Key},value:{item.Value}");
Console.WriteLine("\n");
}
Console.ReadLine();
}
}
}
输出:
fruits Before:
key:a,value:apple
fruits Before:
key:b,value:banana
fruits Before:
key:c,value:cherry
fruits After:
key:a,value:apple
fruits After:
key:b,value:banana
fruits After:
key:c,value:cherry
ProjectVersion Before:
key:test,value:123
ProjectVersion Before:
key:qa,value:456
ProjectVersion Before:
key:uat,value:789
ProjectVersion Before:
key:stage,value:147
ProjectVersion Before:
key:product,value:258
ProjectVersion After:
key:test,value:999
ProjectVersion After:
key:qa,value:456
ProjectVersion After:
key:uat,value:789
ProjectVersion After:
key:stage,value:147
ProjectVersion After:
key:product,value:258