C# 使用具有“非标准”类型的字典

本文关键字:非标准 类型 字典 | 更新日期: 2023-09-27 18:32:16

我正在使用一个电子计算引擎进行开发,其中所有对象都是WDataObject类型。

我有一个类来创建适用于字符串值的图形,但现在我需要创建这些 WDataObject 的图形。

要查看 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;

在此上下文中,如何替换特定键中的值?

任何帮助,不胜感激。

C# 使用具有“非标准”类型的字典

多亏了您的指示,这段代码解决了这个问题:

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 ); }
    }