少错 TryGetValue 然后 null 检查语法
Less wrong TryGetValue then null check syntax
我对 C# 还是有点陌生...我发现自己一遍又一遍地重复使用特定的过程。在我为个人懒惰编写辅助方法之前,是否有更短或错误更少的方法来编写这种语句?
Dictionary<string, string> data = someBigDictionary;
string createdBy;
data.TryGetValue("CreatedBy", out createdBy);
//do that for 15 other values
...
MyEntity me = new MyEntity{
CreatedBy = createdBy ?? "Unknown",
//set 15 other values
...
}
本质上,通过尝试获取一个值在对象上设置一个 属性,然后如果它为空则使用默认值。我有很多属性,如果我能
就更好了
MyEntity me = new MyEntity{
CreatedBy = TryToGetValueOrReturnNull(data, "CreatedBy") ?? "Unknown",
...
}
同样,我完全有能力编写自己的辅助函数。在我这样做之前,我正在寻找现有的本机功能或 shorthand。
public static class DictionaryExtensions
{
public static U TryGetValueOrDefault<T, U>(this IDictionary<T, U> dict, T key, U defaultValue)
{
U temp;
if (dict.TryGetValue(key, out temp))
return temp;
return defaultValue;
}
}
然后做类似的事情:
Dictionary<string, string> data = someBigDictionary;
//do that for 15 other values
...
MyEntity me = new MyEntity{
CreatedBy = data.TryGetValueOrDefault("CreatedBy", "Unknown"),
//set 15 other values
...
}
TryGetValue
returns a bool
指示是否在字典中找到该键。所以你应该使用它并将变量设置为默认值,如果它没有找到:
string createdBy;
if (!data.TryGetValue("CreatedBy", out createdBy)) createdBy="Unknown";
有许多类似的问题(如this and this)提出了从扩展方法到从字典继承和覆盖索引器的不同解决方案。然而,它们是在 C# 7 之前编写的,使用 C# 7,您可以在一行中完成此操作:
CreatedBy = data.TryGetValue("CreatedBy", out var value) ? value : "Unknown"
我对 C# 还是有点陌生...我发现自己一遍又一遍地重复使用特定的过程。在我为个人懒惰编写辅助方法之前,是否有更短或错误更少的方法来编写这种语句?
Dictionary<string, string> data = someBigDictionary;
string createdBy;
data.TryGetValue("CreatedBy", out createdBy);
//do that for 15 other values
...
MyEntity me = new MyEntity{
CreatedBy = createdBy ?? "Unknown",
//set 15 other values
...
}
本质上,通过尝试获取一个值在对象上设置一个 属性,然后如果它为空则使用默认值。我有很多属性,如果我能
就更好了MyEntity me = new MyEntity{
CreatedBy = TryToGetValueOrReturnNull(data, "CreatedBy") ?? "Unknown",
...
}
同样,我完全有能力编写自己的辅助函数。在我这样做之前,我正在寻找现有的本机功能或 shorthand。
public static class DictionaryExtensions
{
public static U TryGetValueOrDefault<T, U>(this IDictionary<T, U> dict, T key, U defaultValue)
{
U temp;
if (dict.TryGetValue(key, out temp))
return temp;
return defaultValue;
}
}
然后做类似的事情:
Dictionary<string, string> data = someBigDictionary;
//do that for 15 other values
...
MyEntity me = new MyEntity{
CreatedBy = data.TryGetValueOrDefault("CreatedBy", "Unknown"),
//set 15 other values
...
}
TryGetValue
returns a bool
指示是否在字典中找到该键。所以你应该使用它并将变量设置为默认值,如果它没有找到:
string createdBy;
if (!data.TryGetValue("CreatedBy", out createdBy)) createdBy="Unknown";
有许多类似的问题(如this and this)提出了从扩展方法到从字典继承和覆盖索引器的不同解决方案。然而,它们是在 C# 7 之前编写的,使用 C# 7,您可以在一行中完成此操作:
CreatedBy = data.TryGetValue("CreatedBy", out var value) ? value : "Unknown"