【问题标题】:How to cast List<T> to a derived class of T [duplicate]如何将 List<T> 转换为 T 的派生类 [重复]
【发布时间】:2014-01-22 03:03:24
【问题描述】:

AnswerRecords返回DnsRecordBase的列表:

List<DnsRecordBase> _Records = _DnsMessage.AnswerRecords;

MxRecord 继承自 DnsRecordBase:

public class MxRecord : DnsRecordBase

如何投_Records有MxRecord的列表?

我试过了:

List<MxRecord> _Records = (MxRecord)_DnsMessage.AnswerRecords;
List<MxRecord> _Records = _DnsMessage.AnswerRecords as MxRecord;

这种语法不起作用:)

【问题讨论】:

  • @nvoigt 虽然这回答了问题,但这实际上并不是重复的,而是完全相反的

标签: c#


【解决方案1】:

如果_Records 中的所有元素都是MxRecord,这应该可以工作

List<DnsRecordBase> _Records = _DnsMessage.AnswerRecords;
List<MxRecord> _MxRecords = _Records.Cast<MxRecord>().ToList();

【讨论】:

  • 如果它们不都是 MxRecord 类型,您可以使用 Enumerable.OfType&lt;MxRecord&gt;() 方法仅获取 MxRecords 类型的项目
  • 感谢您的工作。我不知道铸造方法。所以在一行中:List&lt;MxRecord&gt; _Records = _DnsMessage.AnswerRecords.OfType&lt;MxRecord&gt;().Cast&lt;MxRecord&gt;().ToList();
  • 如果您使用OfType,则不需要演员表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2014-02-05
  • 2016-09-28
  • 1970-01-01
  • 2019-04-13
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多