C# 使用PropertyInfo作为键

C# 使用PropertyInfo作为键,c#,reflection,C#,Reflection,我正在创建一个需要缓存自定义属性的应用程序,所以我在考虑最好的方法,并决定使用ConcurrentDictionary作为我的“缓存”。我的问题是,我是否可以使用PropertyInfo或MethodInfo作为键?每种方法都是独一无二的吗?每种比较都是一样的吗?为什么不试试看呢PropertyInfo和MethodInfo似乎效率很低,但我相信您可以让它工作。您尝试了什么?字典键将使用GetHashCode()散列。哈希是一致的,但不一定是唯一的。也许您最好使用完全限定的名称作为键(程序集命名

我正在创建一个需要缓存自定义属性的应用程序,所以我在考虑最好的方法,并决定使用ConcurrentDictionary作为我的“缓存”。我的问题是,我是否可以使用PropertyInfo或MethodInfo作为键?每种方法都是独一无二的吗?每种比较都是一样的吗?

为什么不试试看呢<如果您需要快速查找,code>PropertyInfo和
MethodInfo
似乎效率很低,但我相信您可以让它工作。您尝试了什么?字典键将使用
GetHashCode()
散列。哈希是一致的,但不一定是唯一的。也许您最好使用完全限定的名称作为键(程序集命名空间类型成员)。@DanWilson我知道反射非常昂贵,但我已经将它们作为参数传递给我正在编辑的方法,所以我认为这是比为每个方法创建一个参数更简单的解决方案key@CodeCaster从我的测试来看,我的解决方案似乎应该有效,但我仍然怀疑这是否真的是“安全”的解决方案。依靠这一点是不确定的。由于
PropertyInfo
MethodInfo
不重写
Equals
GetHashCode
,因此您将从
对象
获得默认的引用等式。尽管反射元数据缓存(和其他内部构件)意味着您应该在每次以一种特定的方式获取相同的实例时都返回它们,但从技术上讲,并不能保证您会这样做。另请参阅,了解更微妙的出错方式(以及更安全的替代方法)。