【发布时间】:2021-12-11 08:02:31
【问题描述】:
我通常可以在这样的 Dictionary 类型变量中使用First() 方法,
Dictionary<string,string> dic = new Dictionary<string,string>();
dic.Remove(dic.First(kvp => kvp.Value == some_value).Key);
但是,当我尝试从 Dictionary 继承一个类时,如下所示,它给了我一个错误。
class Dic : Dictionary<string, string>
{
public void DoSomething()
{
Remove(First(kvp => kvp.Value == some_value).Key);
}
}
顺便说一句,First() 并非来自字典
我尝试实现IEnumerable,但没有帮助
【问题讨论】:
-
dic在DoSomething方法中是什么? -
对不起@viveknuna 我已经更正了
-
根据您的实际用例,从 Dictionary 派生可能不是一个好的决定。更喜欢组合而不是继承,或者使用扩展方法。你看到了吗:stackoverflow.com/questions/1636885/…?
-
First()是System.Linq.Enumerablestaticclass 中定义的扩展方法。你需要一个using System.Linq;指令让编译器找到它; Visual Studio 将在需要时建议此修复程序。 -
只是想指出,您的字典似乎是错误的。如果您经常按值删除,您应该考虑翻转键和值,或者您应该考虑有一对字典(“forward”和“reverse”),所以当你想删除一个正向值 X 时,你在反向的键中查找 X 以获得反向的值 Y,它是正向的键。您,然后根据您现在知道的键从两个字典中删除(使用键 X 从反向删除,使用键 Y 从正向删除)