Tag: 集合

ConfigurationManager.ConnectionStrings从machine.config返回额外的连接字符串

我正在写一个Windows服务,我需要在App.config中定义的所有连接字符串的列表。 我使用System.Configuration.ConfigurationManager.ConnectionStrings来获取所有连接。 它总是返回这个额外的连接: data source =。\ SQLEXPRESS; Integrated Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf; User Instance = true 我认为是在machine.config中添加的。 我的App.config是: 无论如何,我只能得到App.config中定义的连接字符串(不是machine.config中的那个) 我可以删除它,但我想知道是否有更清洁的方式! 谢谢

集合类型属性的setter

集合类型属性是否必需的setter //Type 1 class Company { private IList customers; public IList Customers { get { return customers; } set { customers = value; } } } //Type 2 class Company { private readonly IList customers = new List(); public IList Customers { get { return customers; } } } 我什么时候使用Type 1和Type 2? 如果我初始化List并使用readonly属性Customers,那还不够吗? 如在Company.Customers.Add(new Customer) […]

比较两个Dictionary 的最佳方法是否相等

这是为两个字典的平等创建比较器的最佳方法吗? 这需要准确。 请注意,Entity.Columns是KeyValuePair的字典(字符串,对象): public class EntityColumnCompare : IEqualityComparer { public bool Equals(Entity a, Entity b) { var aCol = a.Columns.OrderBy(KeyValuePair => KeyValuePair.Key); var bCol = b.Columns.OrderBy(KeyValuePAir => KeyValuePAir.Key); if (aCol.SequenceEqual(bCol)) return true; else return false; } public int GetHashCode(Entity obj) { return obj.Columns.GetHashCode(); } } 关于GetHashCode实现也不太确定。 谢谢!

Hashtable对象仍然有用吗?

System.Collections.Hashtable对象是否已过时? 随着C#v2和v3中generics的实现和改进,我发现Hashtable比通用词典更合适已经有很长一段时间了。 从字面上看,我记不清上次使用Hashtable的时候了。 只是想知道是否有其他人发现Hashtable仍然适合或优先实施的情况和该决定的基础 – 易用性,性能,集合大小,对象类型等。 更新:意味着将此问题限制为C#。

使“修改时枚举”集合成为线程安全的

我想创建一个可以在枚举时修改的线程安全集合。 示例ActionSet类存储Action处理程序。 它有Add方法,它为列表添加一个新的处理程序,以及枚举和调用所有收集的操作处理程序的Invoke方法。 预期的工作方案包括非常频繁的枚举,在枚举时偶尔进行修改。 如果在枚举未结束时使用Add方法修改它们,则正常集合会抛出exception。 这个问题有一个简单但缓慢的解决方案:在枚举之前克隆集合: class ThreadSafeSlowActionSet { List _actions = new List(); public void Add(Action action) { lock(_actions) { _actions.Add(action); } } public void Invoke() { lock(_actions) { List actionsClone = _actions.ToList(); } foreach (var action in actionsClone ) { action(); } } } 这个解决方案的问题是枚举开销,我希望枚举非常快。 我创建了一个相当快速的“递归安全”集合,允许在枚举时添加新值。 如果在枚举main _actions集合时添加新值, _actions将值添加到临时_delta集合而不是主集合。 完成所有枚举后, _delta值将添加到_actions集合中。 如果在枚举main _actions集合时添加一些新值(创建_delta集合),然后再次重新输入Invoke方法,我们必须创建一个新的合并集合( […]

collections被修改; 枚举操作可能无法执行。 锁在哪里可用?

这是一个只有我正在编写和使用的小程序。 现在我要编写所有使用导致此问题的hashset的区域的代码 我不明白这是怎么可能的。 此项目仅在MainWindow中使用 hsProxyList是一个哈希集 HashSet hsProxyList = new HashSet(); 错误发生在下面的迭代中 lock (hsProxyList) { int irRandomProxyNumber = GenerateRandomValue.GenerateRandomValueMin(hsProxyList.Count, 0); int irLocalCounter = 0; foreach (var vrProxy in hsProxyList) { if (irLocalCounter == irRandomProxyNumber) { srSelectedProxy = vrProxy; break; } irLocalCounter++; } } } 我使用hsProxyList的其他地方 我在计算时没有锁定对象 – 我想这不会导致任何错误,但可能不正确 – 不重要 lblProxyCount.Content = “remaining proxy count: ” […]

检查集合是否为空

public ActionResult Create(FormCollection collection, FormCollection formValue) { try { Project project = new Project(); TryUpdateModel(project, _updateableFields); var devices = collection[“devices”]; string[] arr1 = ((string)devices).Split(‘,’); int[] arr2 = Array.ConvertAll(arr1, s => int.Parse(s)); project.User = SessionVariables.AuthenticatedUser; var time = formValue[“Date”]; project.Date = time; project.SaveAndFlush(); foreach (int i in arr2) { Device d = Device.Find(i); d.Projects.Add(project); d.SaveAndFlush(); } […]

.NET中是否存在已排序的队列?

我需要一个相当专业的.NET集合,我不认为BCL可以帮助我,但我想如果有人知道类似的话,我会把它扔出去。 基本上,我的要求是: 我有一对值列表,例如:(3,10),(5,10),(3,7),(5,5) 订单很重要,即。 (3,10)!=(10,3) 单个值的副本很好,但应删除重复对(最好是静默)。 踢球者是,我需要这个列表一直排序。 我只对任何时候排序算法定义的列表中的第一个值感兴趣。 所以,我希望能够做的一些示例代码(正如我设想的那样可能会实现,其他适合上述的实现都可以): public class Pair { public Pair(int first, int second) { First = first; Second = second; } public int First { get; set; } public int Second { get; set; } } SortedQueue foo = new SortedQueue((left, right) => { return right.First – left.First; }); foo.Add(new […]

linq如何选择具有包含一个或多个值的数组(或列表)的子集合的父级

这似乎很容易 var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId == “home”)); 当产品属性的值为“home”时返回gg 我需要它返回where和gg具有数组的产品属性值,即 var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId in “home,work”));

在集合类型上使用支撑初始化程序是否设置了初始容量?

在集合类型上使用支撑初始化程序是否设置了它的容量,或者您是否仍需要指定它? 那就是: var list = new List(){ “One”, “Two” }; 结果与此相同: var list = new List(2){ “One”, “Two” };