Tag: 集合

C#从Color中获取所有颜色

我想让ComboBox填充System.Drawing.Color所有颜色 但我似乎无法从该系列中收集所有颜色 我已经尝试过使用foreach来完成这样的工作: foreach (Color clr in Color) { } 但我得到的只是一个错误。 那我怎么能循环所有的颜色呢? 任何帮助将不胜感激。

参数的最佳实践:IEnumerable与IList对比IReadOnlyCollection

当得到延迟执行中的值时,我会从方法返回 IEnumerable时得到。 返回一个List或IList应该只是在修改结果的时候,否则我会返回一个IReadOnlyCollection ,所以调用者知道他得到的不是用于修改的(这使得该方法甚至可以重用对象)来自其他来电者)。 但是,在参数输入方面,我有点不太清楚。 我可以采用IEnumerable ,但如果我需要多次枚举怎么办? 俗话说“ 你发送的东西要保守,你接受的东西要自由 ”,建议拿一个IEnumerable是好的,但我不太确定。 例如,如果以下IEnumerable参数中没有元素,则可以通过首先检查.Any()来保存此方法中的大量工作,这需要在此之前使用ToList()以避免枚举两次 。 public IEnumerable RemoveHandledForDate(IEnumerable data, DateTime dateTime) { var dataList = data.ToList(); if (!dataList.Any()) { return dataList; } var handledDataIds = new HashSet( GetHandledDataForDate(dateTime) // Expensive database operation .Select(d => d.DataId) ); return dataList.Where(d => !handledDataIds.Contains(d.DataId)); } 所以我想知道什么是最好的签名,在这里? 一种可能性是IList data ,但接受列表表明您计划修改它,这是不正确的 – 此方法不会触及原始列表,因此IReadOnlyCollection似乎更好。 但是IReadOnlyCollection强制调用者每次执行ToList().AsReadOnly()都会变得有点难看,即使使用自定义扩展方法.AsReadOnlyCollection […]

在C#中,通过字符串属性对对象列表进行排序并获得正确顺序的最佳方法是什么?

我有一个“问题”对象列表,我想按“优先级”字段对它们进行排序。 问题是“优先级”是一个字符串名称,如“HIGH”,“MEDIUM”,所以我没有我可以排序的ID。 如何排序并告诉分拣机“HIGH”高于“MEDIUM”高于“LOW”?

C#线程图像处理

for (int x = 0; x < blockCountX; x++) { for (int y = 0; y < blockCountY; y++) { //get blocks from image to new image and send to threaded processor imageBlocks[x, y] = image.Clone(clipRectangle, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(ThreadedFromHeightMap)); t.Start(imageBlocks[x,y]); clipRectangle.Offset(0, IMAGEBLOCKSIZE); } clipRectangle.Offset(IMAGEBLOCKSIZE, clipRectangle.Location.Y * -1); } break; } } […]

覆盖List 的Add()

我不能重载List的Add方法吗? class ListDemo:List { public override T Add(T value) { return base.Add(value); } } 我收到以下错误: 1)类型参数“T”与外部类型“CollectionsExample.ListDemo”中的类型参数同名 2)’CollectionsExample.ListDemo.Add(T)’:找不到合适的方法来覆盖

将对象的通用集合传递给需要基类型集合的方法

假设我有一个期望基类型的generics集合参数的方法,请参阅下面的Test.MethodA(IEnumerable(BaseClass)listA) 。 为什么我传递代码不会构建的派生类型的集合? 难道DerivedClass的所有实例都不是BaseClass吗? 我本来可以创建一个新的List(BaseClass)并将其传递给MethodA(IEnumerable(BaseClass)listA) 。 但我认为C#足够聪明,知道DerivedClass的集合具有与BaseClass集合相同的所有属性。 使用List.Cast(T)()方法,因为我已经展示了解决此问题的最佳方法? abstract class BaseClass { public int SomeField; public abstract string SomeAbstractField { get; } } class DerivedClass:BaseClass { public override string SomeAbstractField { get { return “foo”; } } } class TestClass { public void MethodA(IEnumerable listA) { } public void MethodB() { List listB = new […]

从自定义集合中检索项目

我有以下课程 public class People { public int id; public string nameHash; public string name; } 我需要创建一个自定义集合,由类People的对象组成,它允许我通过其id和nameHash检索元素。 该集合必须能够使用foreach迭代其元素: foreach (People person in PeopleCollection) { … } 我怎么做? 如果你不能给出详细的答案,至少要给出一个简短的行动计划。 提前致谢!

如何将多个变量与单个条件进行比较?

我有这个: if (input.Text.ToUpper() == “STOP”) 但是有很多可能的值,我无法像这样单独指定它们: if (input.Text.ToUpper() == “STOP” || input.Text.ToUpper() == “END”) 有没有办法可以做到这样的事情: if (input.Text.ToUpper() == “STOP”, “END”, “NO”, “YES”) 那么使用STOP,END,NO或YES会完成任务吗? 使用任何包含将不起作用,其他时候接受的单词将在其中包含单词STOP和END。

存储树结构的集合是什么?

我想在组合中存储组织结构图。 我认为树数据结构最适合我的需要,因为我需要在一个节点上添加多个节点。 如果我理解正确, LinkedList只提供一个节点添加到另一个节点。 我查看了C5 treeset集合,但似乎没有Add()方法向一个节点添加2个以上的节点。 我还从Windows窗体库中查看了Treeview类,但我不想将Windows窗体dll添加到我的项目中,因为我正在构建服务层应用程序。 (还是没事?) 我不想写自己的树集合类,如果已经有第三方提供的那个? 有什么建议吗? 谢谢

使用BindingOperations.EnableCollectionSynchronization

我有两个WPF应用程序“UI”,“调试器”和一个ClassLibrary“BL”。 UI对Debugger和BL的引用。 调试器引用BL。 我在BL中收集了名为MyCollection的集合。 UI应用程序启动调试器应用程序,调试器绑定到BL中的集合MyCollection。 当我尝试从UI应用程序更改MyCollection集合时,我遇到exception。 A first chance exception of type ‘System.NotSupportedException’ occurred in PresentationFramework.dll Additional information: This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread. 我在google搜索并发现: BindingOperations.EnableCollectionSynchronization我无法弄清楚如何使用它。 我不想引用我的BL项目中的任何UI dll。 任何人都能协助我吗? 谢谢您的帮助!