如何基于派生类字段过滤基类集合? - c#

假设我有一个名为MyThings的集合,其中包含类Thing的对象,并且我有一个名为ShinyThing的类,该类是从Thing派生的,所以我这样做:

MyThings boxWithMyThings = new MyThings();
ShinyThing Diamond = new ShinyThing(){ facets =  10; weight = 500 };
boxWithMyThings.Add(Diamond);

如何使用派生类的属性过滤集合boxWithMyThings

c#参考方案

您可以尝试使用OfType方法,只要boxWithMyThings实现IEnumerable<Thing>

var filtered = boxWithMyThings.OfType<ShingThing>().Where(st => st.facets == 10);

如果要过滤多种类型(不仅限于ShinyThings,还可以将Concat与许多类似的调用一起使用:

IEnumerable<Thing> shinyEnough = boxWithMyThings.OfType<ShingThing>().Where(st => st.shininess >= 10);
IEnumerable<Thing> dirtyEnough = boxWithMyThings.OfType<DirtyThing>().Where(dt => dt.dirtiness >= 10);
var veryDirtyAndVeryCleanObjects = shinyEnough.Concat(dirtyEnough); 

当然,您可以通过检查类型和类型转换将此处的所有Where谓词放入一个大的Where子句中,这些子句可能不易理解,但效率更高:

boxWithMyThings.Where(t =>  
     { 
         if (t is ShinyThing) 
                return (t as ShinyThing).shininess >= 10;
         else if (t is DirtyThing) 
                return (t as DirtyThing).dirtiness >= 10; 
         else return false;
     });

将对象转换为List <object> - c#

我看过类似的问题,但没有什么合适的。我有一个碰巧包含列表的对象。我想把它变成我可以列举的东西。例如:object listObject; // contains a List<Something> List<object> list; list = listObject as List<object>; // list c…

如何告诉Checker遗留方法将接受Nullable类型? - java

考虑一下:@Nullable Object obj = null; Optional<Object> optional = Optional.ofNullable(obj); 这会失败,因为检查器框架假定ofNullable无法接受null值(毕竟,其参数未标记为@Nullable)。有没有办法告诉Checker-framework这个方法(或我…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript

当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…

LeetCode题解求一根绳子被切两刀能组成一个三角形的概率。

如题题解:我们可以设绳长为1,设:- 其中两段长为x, y且x, y都>0- 故第三段长为1-x-y且>0故可以在二维坐标轴画出一个三角形(由x=0;y=0;1-x-y=0围成)要想构成三角形还要满足:- x+y > 1-x-y => x+y > 0.5- x+1-x-y > y => y < 0.5- y+1…