Tag: 字典

如何正确处理添加新项目到字典?

我有一个ASP.NET应用程序,我使用静态类作为缓存。 在静态类中是内部字典,它包含缓存的对象。 当然,在静态类中有添加/删除/清除等方法…它看起来如下: public static class CacheManager { private static Dictionary cacheItems = new Dictionary(); private static ReaderWriterLockSlim locker = new ReaderWriterLockSlim(); public static Dictionary CacheItems { get { return cacheItems; } } public static void AddCacheItem(string key, object data) { locker.EnterWriteLock(); try { cacheItems.Add(key, data); } finally { locker.ExitWriteLock(); } } … } ASP.NET应用程序运行时,项目已添加到缓存(字典)中。 […]

如何从xml字典序列化中正确删除xmln:xsi和xmlns:xsd

问题:我使用的是可序列化的字典类 http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx ,序列化字典。 它适用于下面的示例类。 _ Public Class ccl _ Public xx As String = “” _ Public yy As String = “” ‘ _ ‘Public ww As New SerializableDictionary(Of String, String) End Class 但它增加了一个, xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance AND xmlns:xsd=”http://www.w3.org/2001/XMLSchema? 到标签 现在我通过将字典类更改为来修复它 Dim ns As System.Xml.Serialization.XmlSerializerNamespaces = New System.Xml.Serialization.XmlSerializerNamespaces() ‘Add an empty namespace and empty value ns.Add(“”, “”) […]

显示可编辑字典的最简单方法是什么?

我有一个Dictionary并希望让用户查看和编辑内容,可能会添加新条目。 我该怎么做? 输入validation,处理源字典的动态更新和看起来不错是一个奖励。

使用C#HashSet解决相等不相等的问题

我基于我最近发现的关于Dictionary性能特征,因此我使用Dictionary ,其中bool被忽略但据说我可以使用HashSet 。 例如: Dictionary overlap; class bounds { public float top_left_x, top_left_y, width, height; public bool equal(bounds other) { return upper_left_x + width > other.upper_left_x && upper_left_x other.upper_left_y && upper_left_y < other.upper_left_y + other.height; } public … GetHashCode() { …; } } 在这里,我没有使用等于检查相等,而是重叠,这在其他地方肯定会令人讨厌,但我有理由这样做。 我假设如果可以在O(1)时间内从一个键中查找一个值,那么键也可以从其自身中查找。 所以我可能会将数千个边界重叠并执行此操作: overlap.ContainsKey(new bounds(…)); 如果给定的绑定与集合中的任何其他绑定重叠,则在O(1)时间内找出。 我还想知道如果我改变一个边界的(x,y)位置会发生什么,大概就像删除然后再次将它添加到集合中,性能明智,非常昂贵? 我将什么放入GetHashCode函数? 目标 如果这有效,那么我在使用这种机制后找出给定边界重叠的其他边界。 在这个系统中很少有边界移动,并且在填充集合后没有添加新的边界。 新添加的边界需要能够重叠旧的边界。 […]

C#类型转换:显式转换存在但引发转换错误?

我了解到HashSet实现了IEnumerable接口。 因此,可以将HashSet对象隐式转换为IEnumerable : HashSet foo = new HashSet(); IEnumerable foo2 = foo; // Implicit cast, everything fine. 这也适用于嵌套generics类型: HashSet<HashSet> dong = new HashSet<HashSet>(); IEnumerable<IEnumerable> dong2 = dong; // Implicit cast, everything fine. 至少这就是我的想法。 但如果我创建一个Dictionary ,我会遇到一个问题: IDictionary<T, HashSet> bar = new Dictionary<T, HashSet>(); IDictionary<T, IEnumerable> bar2 = bar; // compile error 最后一行给出了以下编译错误(Visual Studio 2015): 无法隐式转换类型 System.Collections.Generic.IDictionary<T, […]

字典C中的GetHashCode和Equals实现#

我来到这个网站,在Dictionary中搜索对象比较,我开始知道重写GetHashCode和Equals是在C#中进行对象比较的必要条件。 这是我尝试使用FOREACH迭代方法解决的一段代码。 但是由于性能问题,我的Boss说不使用任何迭代(可能使用containskey或containsvalue方法)也是如此。 任何帮助都非常欢迎.. public class employee { public string empname { get; set; } public string location { get; set; } public double kinid { get; set; } public double managerKin { get; set; } public override bool Equals(object obj) { return base.Equals(obj); } public override int GetHashCode() { return base.GetHashCode(); } } public […]

将类定义存储在字典中,稍后将实例存储

我想要做的是类似下面的内容(所有对象类都有一个共同的接口): MyDict.Add(“A”, MyAObjectClass); // Not an instance MyDict.Add(“B”, MyBObjectClass); MyDict.Add(“C”, MyCOjbectClass); String typeIwant = “B”; // Could be passed to a function or something MyCommonInterface myobject = MyDict[typeIwant](); 我怎么能编写这样的东西? 这样做的目的是不必创建我将存储在我的字典中的每种类型的实例(可能是相当多的),而只是实例我实际将要使用的实例。

inheritance字典的Serialize类不是序列化属性

我有一个inheritance自Dictionary的类,并且有一些属性。 当我序列化它时,只序列化字典而不是属性。 如果我有一个包含属性的有效负载,它会对它们进行反序列化。 如何使其序列化我的对象,包括属性? public class Maintenance : Dictionary { public int PersonId { get; set; } } return JsonConvert.DeserializeObject(jsonString); //Populates PersonId and all other properties end up in the dictionary. return JsonConvert.SerializeObject(maintenance); //Only returns dictionary contents 我很欣赏有关如何使序列化使用与反序列化似乎使用相同的行为的建议。

使用数组初始化语法在C#上初始化Dictionary实例时会发生什么?

有没有人知道C#编译器使用以下代码做什么? dict = new Dictionary() { { 1, “value1” }, { 2, “value2” } } 它是否创建KeyValuePair实例并调用Add方法或执行更优化的操作尚不清楚。 你们有谁都知道吗?

C#中的动态字典用法

我在C#中使用动态字典。 我面临的问题是TryGetMember的行为,我在动态字典类中重写。 这是动态字典的代码。 class DynamicDictionary : DynamicObject { private IDictionary m_dictionary; public DynamicDictionary(IDictionary a_dictionary) { m_dictionary = a_dictionary; } public override bool TryGetMember(GetMemberBinder a_binder, out object a_result) { bool returnValue = false; var key = a_binder.Name; if (m_dictionary.ContainsKey(key)) { a_result = m_dictionary[key]; returnValue = true; } else a_result = null; return returnValue; } } 在这里,每当我们从外部引用一些键时,TryGetMember将在运行时被调用,但奇怪的是,binder的Name成员总是给出我们从外部引用的键,它总是解析写为字母字符的键名。 […]