我有一个字典,其中键可以是字符串或小数。值可以是不同类型的对象。我想编写可以管理在所有情况下删除字典项的代码。
我要替换的代码如下:
ConcurrentDictionary<string, Parus.Metadata.Units.Unit> objDict = cacheItem.Value as ConcurrentDictionary<string, Parus.Metadata.Units.Unit>;
foreach (var detaildGrid in this.MasterGridFrameControl.ChildFrames)
{
foreach (GridDataItem item in detaildGrid.GridControl.SelectedItems)
{
object dataKey = item.GetDataKeyValue("SubKey");
objDict.Remove((string)dataKey);
}
}
或如下:
ConcurrentDictionary<decimal, Domain> objDict = cacheItem.Value as ConcurrentDictionary<decimal, Domain>;
foreach (GridFrameControl detaildGrid in this.MasterGridFrameControl.ChildFrames)
{
foreach (GridDataItem item in detaildGrid.GridControl.SelectedItems)
{
object dataKey = item.GetDataKeyValue("SubKey");
objDict.Remove((decimal)dataKey);
}
}
代码应如下所示:
foreach (GridDataItem item in detaildGrid.GridControl.SelectedItems)
{
object dataKey = item.GetDataKeyValue("SubKey");
object[] parameters = { dataKey };
Type t = cacheItem.Value.GetType();
MethodInfo info = t.GetMethod("Remove");
info.Invoke(cacheItem.Value, parameters);
}
但是,我收到此错误消息:找到了模糊的匹配。
我在互联网上看过一些文章,他们说我应该在这个电话中指定第二个参数:
MethodInfo info = t.GetMethod("Remove");
但是,我不知道该怎么做。
任何帮助都表示赞赏。
提前谢谢。
答案 0 :(得分:1)
试试这个:
var genericArguments = cacheItem.Value.GetType().GetGenericArguments();
var keyType = genericArguments[0]; // Maybe implement some error handling.
MethodInfo info = t.GetMethod("Remove", new [] { keyType });