【发布时间】:2011-06-07 21:12:08
【问题描述】:
这是我正在考虑的完整实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
namespace Utils {
public static class IDictionaryExt {
public static IEnumerable<SelectListItem> ToSelectListItems<T, R>(this IDictionary<T, R> dic, T selectedKey) {
return dic.Select(x => new SelectListItem() { Text = x.Value.ToString(), Value = x.Key.ToString(), Selected=(dynamic)x.Key == (dynamic)selectedKey });
}
}
}
注意使用动态转换的相等性检查:(dynamic)x.Key == (dynamic)selectedKey。这是检查selectedKey 和x.Key 之间相等性的最佳方法吗?基于@Gabe 在Operator '==' can't be applied to type T? 中的评论,我相信它是:重载决议推迟到运行时,但我们确实得到“正常”重载决议(即考虑ValueTypes 和其他Objects 和== 重载与默认引用相等的 Objects 相比)。
【问题讨论】:
-
为什么要强制转换为动态?只需致电
x.Key.Equals(selectedKey),让它为您确定。 -
@Tejs - 是的,这几乎是我的问题:我应该怎么做 1)
(dynamic)x.Key == (dynamic)selectedKey2)x.Key.Equals(selectedKey)3)(object)x.Key == (object)selectedKey。我认为你建议的 #2 会很好,但后来我怀疑我的信心,并认为我可能会遗漏一些东西。 -
@Tejs - 唉,已经给出了更多选择。
标签: c# .net asp.net-mvc generics asp.net-mvc-3