使用Dictionaries从If Else块输出值类型



我正试图从for循环中的if and else块向外部变量val_dict添加值。问题是,如果我将变量初始化为输出类型类之一,则if块的输出类型与else块的输出类别不同,else块会为它们中的任何一个抛出类型错误。

简而言之,CCD_ 2是可以是字典<字符串,对象>或者null object,但是我似乎无法为这两种对象类型定义一个公共类型。

这是代码:

Dictionary<string, Dictionary<string,object>> data_dict =
new Dictionary<string, Dictionary<string, object>>();
foreach (KeyValuePair<(string, string), object> cat_nam_val in dataset) 
{
var val_dict = new Dictionary<string, object>(); //use val_dict as dictionary or object

if (target_survey_id != null)
{
data_dict[target_survey_id].TryGetValue(cat_nam_val.Key.Item1, out val_dict);
}
else
{ 
data_dict.TryGetValue(cat_nam_val.Key.Item1, out val_dict);
}
if (IsDictionary(val_dict)); 
{
val_dict[cat_nam_val.Key.Item2]  = cat_nam_val.Value; //generate new dict becoz val_dict is an object so cannot be indexed
}
} 

使用out时不能强制类型。因此,您可以使用一个临时out变量,然后在确定它是字典的情况下强制转换它。

foreach (KeyValuePair<(string, string), object> cat_nam_val in dataset)
{
var val_dict = new Dictionary<string, object>(); //use val_dict as dictionary or object
if (target_survey_id != null)
{
// use a temporary variable to work around type mismatch
data_dict[target_survey_id].TryGetValue(cat_nam_val.Key.Item1, out var temp_val_dict);

// if you know that object is a dictionary, cast and assign
val_dict = (Dictionary<string, object>)temp_val_dict;
}
else
{
data_dict.TryGetValue(cat_nam_val.Key.Item1, out val_dict);
}
if (IsDictionary(val_dict))
{
val_dict[cat_nam_val.Key.Item2] = cat_nam_val.Value; //generate new dict becoz val_dict is an object so cannot be indexed
}
}

最新更新