C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 从KeyedCollection获取密钥列表的最有效方法是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种与泛型字典的Keys属性(类型为KeyCollection)一样高效的方法.

使用Linq SELEct语句可以工作,但每次请求密钥时它都会迭代整个集合,而我相信密钥可能已经在内部存储.

目前我的GenericKeyedCollection类看起来像这样

public class GenericKeyedCollection<TKey,TItem> : KeyedCollection<TKey,TItem> {
    private Func<TItem,TKey> getKeyFunc;

    protected override TKey GetKeyForItem(TItem item) {
        return getKeyFunc(item);
    }

    public GenericKeyedCollection(Func<TItem,TKey> getKeyFunC) {
        this.getKeyFunc = getKeyFunc;
    }

    public List<TKey> Keys {
        get {
            return this.SELEct(i => this.GetKeyForItem(i)).ToList();
        }
    }
}

更新:感谢您的回答,我将使用以下属性而不是使用Linq进行迭代.

public ICollection<TKey> Keys {
        get {
            if (this.Dictionary != null) {
                return this.Dictionary.Keys;
            }
            else {
                return new Collection<TKey>(this.SELEct(this.GetKeyForItem).ToArray());
            }
        }
    }

解决方法

根据 the documentation,该类有一个属性 @L_419_2@,所以你可以这样做:

var keys = collection.Dictionary.Keys;

请注意,有一个警告,如文档中所述.如果使用字典的阈值构造集合,则在至少将许多值放入集合之前,不会填充字典.

如果情况不是这样,即.字典总是很好,上面的代码应该可以做到.

如果没有,那么您必须更改构造以避免设置该阈值,或者您只需通过GetKeyForItem方法循环并提取密钥.

大佬总结

以上是大佬教程为你收集整理的c# – 从KeyedCollection获取密钥列表的最有效方法是什么?全部内容,希望文章能够帮你解决c# – 从KeyedCollection获取密钥列表的最有效方法是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。