2016-02-25 45 views
-1

我正在做一个游戏,其中有正方形(部门)产生一个球去路径。有两种类型的部门:部门和Presector。它们都被放入了Sector类型的列表中。我将如何检查该列表中的某个特定部门在投入使用之前是否实际上是Presector?c# - 检查对象是否在放入列表时进行转换?

顺便说一句:Presector是Sector的子类。

我看遍了整个地方,找不到任何东西。 关键字不适用于我,而Type.IsAssignable从也不是。编辑:也不会工作,因为它只是检查一个对象是否是该类型。

样本代码时间!

List<Sector> sectors = new List<Sector>(); 
sectors.Add(new Sector()); 
sectors.Add(new Presector()); 

现在,我们列出了两个扇区。第二个是铸造的。我如何使用代码找到它?

+2

这将有助于包括一些代码。目前还不清楚你正在尝试做什么,或者你用'as'和'IsAssignableFrom'做了哪些工作。 –

+1

同意。 “as”怎么样都行不通? –

+0

我现在添加了一些示例代码。对不起,我无法解释这一点! – 283

回答

3
if (objectFromList is Presector) 
    // Code here.. 
+0

这也没有效果。它使无法访问的代码。从列表中的对象将被铸造成一个部门,所以**是**不起作用。我想看看这个部门是否曾经是一个部门,最初是一个部门。 – 283

+0

对不起,我没有想到这是工作,因为我没有意识到你不能做,如果(!objectFromList是Presector) – 283

1
List<Sector> sectors = new List<Sector>(); 

sectors.Add(new Sector()); 
sectors.Add(new Presector()); 
sectors.Add(new Sector()); 

Presector ps = new Presector(); 
sectors.Add(ps); 

// this returns an array with one element 
var x = sectors.OfType<Presector>().ToArray(); 

// this returns true (the second element IS a Presector) 
var hasPresector = sectors.Any(s => s is Presector); 

// this returns true (the presector is present in the list) 
var containsPs = sectors.Contains(ps); 

用 '是' 关键字有什么问题吗?

+0

你是如何得到List.OfType? – 283

+0

using System.Linq –

+0

如何检查列表中的特定扇区是否为Presector? – 283