我有一个名为 的基类,NodeUpgrade它有几个子类型。特定子类的示例是FactoryUpgrade.
我有一个 NodeUpgrades 列表,它可以是不同子类型的混合。如何编写 linq 查询来检索类型NodeUpgrade并转换为该特定类型?
我的工作查询如下所示:
var allFactories = (from Node n in assets.Nodes
from FactoryUpgrade u in n.NodeUpgrades
where u.ClassID == NodeUpgradeTypes.Factory
select u)
Run Code Online (Sandbox Code Playgroud)
这当然行不通。我可以指定输出的最终类型吗?
如果您确定序列中的每个类型都是给定类型,则可以使用Cast<T>()扩展方法。如果列表中可以有多种类型,而您只想要其中一种,则可以使用OfType<T>()过滤序列。
List<Animal> animals = ...
// assumes all animals are cats
var cats = animals.Cast<Cat>();
// var cats = (from animal in animals where ... select animal).Cast<Cat>();
// or maybe animals can contain dogs, but you don't want them
var cats = animals.OfType<Cat>();
Run Code Online (Sandbox Code Playgroud)
不同之处在于,Cast如果动物不是猫,则会抛出异常,而OfType在实际尝试转换之前会执行类型检查。我赞成Cast在OfType当你有信心,统一型号的。(另请注意,这些不执行用户定义的转换。如果您定义了隐式或显式转换,这些方法将不支持这些转换。)
每种情况下的结果序列都是IEnumerable<Cat>,您可以对它进行进一步的查询操作(过滤器、分组、投影ToList()等)
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |