c# - C#:如何从包含抽象类的 IReadOnlyList 中获取派生类的值
问题描述
嗨,我怎样才能返回第一个 ValueNode 的值 + 第一个 ListNode 中第一个值的值?
Node 是父抽象类。
ListNode 是包含 ValueNode 列表的派生类。
ValueNode 是包含该值的派生类。
public static readonly IReadOnlyList<Node> TestData = new List<Node>
{
new ValueNode {Value = "a"},
new ListNode
{
Values = new List<Node>
{
new ValueNode {Value = "b"},
new ValueNode {Value = "c"},
new ListNode
{
Values = new List<Node>
{
new ValueNode {Value = "d"},
new ValueNode {Value = "e"}
}
},
new ListNode
{
Values = new List<Node>
{
new ValueNode {Value = "f"}
}
},
new ValueNode {Value = "g"}
}
},
new ValueNode {Value = "h"},
new ValueNode {Value = "i"},
new ListNode
{
Values = new List<Node>
{
new ValueNode {Value = "j"},
new ValueNode {Value = "k"}
}
},
};
public abstract class Node
{
protected object Data;
}
public class ValueNode : Node
{
public string Value
{
get => (string)Data;
set => Data = value;
}
}
public class ListNode : Node
{
public List<Node> Values
{
get => (List<Node>)Data;
set => Data = value;
}
}
}
}
我想知道如何从 TestData 返回值“a”和“b”值。
解决方案
您可以使用linq表达式来过滤具有给定类型的元素:
IReadOnlyList<Node> testData = new List<Node> { new ValueNode(), new ListNode() };
var valuesOnly = testData.OfType<ValueNode>().ToArray();
这相当于:
var valuesOnly = testData.Where(x => x is ValueNode).ToArray();
推荐阅读
- intellij-idea - 为什么我必须重新启动 Intellij 才能识别 Lombok 注释?
- python - 即使是通过 cmd 窗口上的 pip 安装,cmd 也无法识别爬虫
- python - 使用 python 重新排列 JSON 输出
- python - How to remove adjectives or attributive before noun?
- python - Python将嵌套循环转换为列表理解
- javascript - 屏幕尺寸变化时如何加载和卸载滑块脚本?
- php - Wordpress - 使用 PHP 访问自定义字段值
- java - 从字符串的 ArrayList 中删除数字
- vue.js - 不能在动态呈现的 v-text-field 中使用 @change 函数
- java - Java Swing jLabel java.lang.NullPointerException