我正在开发使用电子计算引擎,其中所有对象都是WDataObject类型。
我有一个类可以创建适用于字符串值的图形,但现在我需要创建这些WDataObjects的图形。
查看WDataObject是否等于其他WDataObject我必须使用自己的方法:.isEqual(WDataObject obj)
因此,如果我创建一个像
这样的字典Dictionary<WDataObject , LinkedList<WDataObject>> map = new Dictionary<WDataObject , LinkedList<WDataObject>>( );
我无法正常从键中获取值,而是必须创建迭代器并手动检查等效性。
我有这个功能正常:
public void addOneWayRelation ( string node1 , string node2 ) {
LinkedList<string> adjacent = new LinkedList<string>( );
try {
adjacent = map[node1];
} catch ( System.Collections.Generic.KeyNotFoundException ) {
map[node1] = adjacent;
}
adjacent.AddLast( node2 );
}
我需要将类型从字符串更改为WDataObject。
我已经有了密钥搜索
private LinkedList<WDataObject> searchKey ( WDataObject k ) {
List<WDataObject> Keys = new List<WDataObject>( map.Keys );
List<LinkedList<WDataObject>> Values = new List<LinkedList<WDataObject>>( map.Values );
for ( int i = 0 ; i < Keys.Count ; i++ ) {
if ( Keys[i].IsEqual( k ) ) {
return Values[i];
}
}
return null;
}
问题是
map[node1] = adjacent;
如何在此上下文中替换特定键的值?
感谢任何帮助。
答案 0 :(得分:0)
感谢您的指示,此代码解决了问题:
Dictionary<WDataObject , LinkedList<WDataObject>> map = new Dictionary<WDataObject , LinkedList<WDataObject>>( new EqualityComparer( ) );
任何使用字典的代码
public class EqualityComparer : IEqualityComparer<WDataObject> {
public int GetHashCode ( WDataObject obj ) { return obj.GetHashCode( ); }
public bool Equals ( WDataObject obj1 , WDataObject obj2 ) { return obj1.IsEqual( obj2 ); }
}