Tag: 集合

从现有按钮创建按钮的数组(集合)

有没有一种简单的方法从我的表单上的现有按钮创建按钮集合? (在c#中)。 我的表单上已经有一系列按钮,我想使用索引来访问它们…例如: myButtonArray[0].ForeColor …// Do something with it 可以这样做吗? 编辑:我可以将数组设置为具有通用的OnClick事件吗? 然后确定点击了arrays中的哪个按钮,比如改变它的颜色?

编辑ObservableCollection的SelectedItem没有绑定控件看到编辑直到它们被保存

我有一个包含ListView和“编辑”按钮的视图。 ListView的ItemSource绑定到底层视图模型上的ObservableCollection属性。 其SelectedItem属性也绑定到视图模型。 单击编辑按钮时,现有视图模型将启动编辑视图/视图模型对(“编辑屏幕”),允许用户编辑当前选定的Account 。 要编辑的Account由主视图模型的SelectedItem属性确定。 问题:即使在单击编辑屏幕的“保存”按钮之前,编辑屏幕中所做的任何更改都会立即反映在其他屏幕的ListView 。 为什么会发生这种情况有意义 – 在更改属性并且ListView正在处理这些通知时, Account正在提升属性更改事件。 期望的结果:绑定控件(如ListView )只应在单击“保存”后才能看到编辑屏幕更改。 可能的解决方案 在编辑过程中暂停帐户的属性更改通知。 缺点:如果在编辑Account实例时执行手动数据绑定更新,则“正在进行”更改将显示在ListView上,即使这些更改尚未引发通知。 此外,如果用户为同一个Account启动第二个编辑窗口,他们将看到“正在进行中”更改。 想法被拒绝。 让编辑屏幕视图模型将Account实例包装在某种EditingAccount类中,该类仅在调用Save()时Save()对其所做的更改复制回原始Account 。 编辑屏幕是否应承担促进此包装的责任,还是应该要求服务层执行此操作? 你怎么看待这些选择? 遇到它时如何解决这个问题?

在新的子集合中枚举时,集合被修改了exception

我知道在你枚举的同时更改集合会导致collection was modified exception 。 但是如果我从较大的子集中得到一个子集合,并且我在枚举该子列表时从一个较大的子集删除了一些项目,我仍然会收到此错误。 在子集合上调用ToList解决了此问题。 但为什么会这样呢? var localCollection = someData.ToList(); // from DB Context var localGrouped = localCollection.GroupBy(x => x.Id).Select(g => new { Id = g.Key, List = g.Select(x => x.Value) }); or .ToList(); // Here how I solve exception var groups = new List<List>(); while (localGrouped.Any()) { var newSelected = new List(); […]

用于雾化T的.Net集合?

我正在寻找是否存在适用于雾化一般类型T的预先存在的.Net“Hash-Set类型”实现。我们有大量相同的对象进入序列化源,需要雾化以节省内存。 Dictionary with the value == key的Dictionary with the value == key完美地工作,但是这些集合中的对象在整个应用程序中可以运行数百万,因此将2个引用存储到每个对象似乎非常浪费。 HashSet不能用,因为它只有Contains,有吗?没办法? 到达实际的成员实例。 显然我可以自己滚动,但想检查是否有任何预先存在的东西。 在C5的扫描没有看到任何跳出来,但然后他们250多页的文档确实让我想知道我是否错过了什么。 编辑 最基本的想法是我需要能够获得独特的对象后退,即HashSet包含(T obj)但不是Get(T obj) / EDIT 最糟糕的集合只需要实现: T GetOrAdd(T candidate) void Clear() 并采用仲裁IComparer和GetOrAdd是~O(1)并且理想情况下是primefaces的,即不浪费时间Hashing两次。 编辑如果没有现有的实施,我们将不胜感激任何关于基本哈希/搭讪技术来源的建议。 – 已经指出了Mono HashSet源代码,因此本节回答/编辑

是否有类似动态数组的List 允许访问.NET中的内部数组数据?

查看List的来源,似乎没有好的方法来访问私有_items项目数组。 我需要的基本上是一个动态的struct 列表 ,然后我可以在适当的位置进行修改。 根据我的理解,因为C#6还不支持ref返回类型,所以你不能让List返回对元素的引用,这需要复制整个项目,例如: struct A { public int X; } void Foo() { var list = new List { new A { X = 3; } }; list[0].X++; // this fails to compile, because the indexer returns a copy // a proper way to do this would be var copy = list[0]; copy.X++; […]

逗号分隔字符串到通用列表

我能够将逗号分隔的字符串转换为IList但是如何修改它以获取IList ,其中T将作为输入参数之一传递? 即如果我需要IList我将传递“int”作为参数,如果我需要IList我将传递“string”作为参数。 我的想法是通过输入参数获取类型是int还是字符串,并使用reflection并将字符串转换为相应的列表 将逗号分隔的字符串转换为IList public static IList SplitStringUsing(this string source, string seperator =”,”) { return source.Split(Convert.ToChar(seperator)) .Select(x => x.Trim()) .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(int.Parse).ToList(); } 注意:以上代码尚未测试 我正在寻找类似的东西 public static IList SplitStringUsing(this string source, string seperator =”,”, T t) { find the type of t and convert it to respective List }

NHibernate中有不同类型答案的问题

我正试图找到问卷调查问题的整洁解决方案。 让我们说我有一个Questionnaire ,其中包含一些Answer ,例如 public class Questionnaire { public virtual ISet Answers {get;set;} } 答案需要根据问题的不同类型,例如出生日期,十分之一,你为什么这么认为等等。 我的第一个想法是这样的: public class Question { public virtual QuestionType TypeOfQuestion {get;set;} public virtual string PromptText {get;set;} } public class Answer { public virtual Question Question {get;set;} } public class DateTimeAnswer : Answer { public virtual DateTime Response {get;set;} } public class […]

将lambda表达式作为参数传递给方法?

这似乎是一个常见的要求,但我无法在任何地方找到解决方案。 我有一个方法,它将根据传递给它的参数OrderBy集合。 我想将’OrderBy’的内容传递给方法,但无法解决如何做到这一点。 我试过的 我已经尝试了一个带字符串的开关(例如,如果你传递’姓名’,它会点击按名称命名它的case ),但这感觉’hacky’和不必要。 我知道它就像Func ,但我无法破解它。 PSEUDO代码: GetOrderedCollection([NOT SURE] orderBy) { return collection.OrderBy(orderBy); }

什么时候BlockingCollection TryTake()可以返回false?

假设BlockingCollection正在使用下面的ConcurrentQueue,如果你使用Timeout.Infinite ,TryTake(T,Int32)方法什么时候会返回false?

频繁插入已排序的集合

我已经对集合(List)进行了排序,我需要始终对其进行排序。 我目前正在我的集合上使用List.BinarySearch,然后在正确的位置插入元素。 我也尝试过每次插入后排序列表,但性能不可接受。 有没有可以提供更好性能的解决方案? 也许我应该使用其他collections品。 (我知道SortedList但它仅限于唯一键)