对不起,我是Dictionary的新手,并将其传递到视图中
我有所有需要发送到View的数据。
在ViewModel内部,这是Dictionary设置
public virtual Dictionary<int?, ImageListItemDto> ImageDictionary { get; set; }
在视图中,我正在查看是否存在某些键值对。
@if (Model != null & Model.ImageDictionary != null && !String.IsNullOrEmpty(Model.ImageDictionary[0].ImageDetail))
{
<div>@Model.ImageDictionary[0].ImageDetail</div>
}
else
{
<div>ImageDetails are not there</div>
}
我不想在for循环中显示每个“ ImageDetail”。如果索引为0,则此方法工作正常,否则会收到错误消息“字典中不存在给定的键。”
如果密钥不存在,是否不应该通过其他密钥?
谢谢
答案 0 :(得分:0)
原因是Dictionary需要实现Object.GetHashCode()
。由于您的键是可空的,并且null没有任何实现,因此也没有HashCode。
有多种方法可以安全地迭代字典。我也不是View中所有计算的忠实拥护者,但是在这里:
@if (Model != null & Model.ImageDictionary != null)
{
foreach(KeyValuePair<string, string> dictValue in Model.ImageDictionary)
{
viewData["key"] = dictValue.Key;
viewData["value"] = (Dictionary<int?, ImageListItemDto>)Model.ImageDictionary.ContainsKey(dictValue.Key) ? (Dictionary<int?, ImageListItemDto>)Model.ImageDictionary[dictValue.Key] : string.Empty;
}
}
在这里阅读有关错误的有用信息:
C# Dictionary - The given key was not present in the dictionary