【问题标题】:C# Pattern matching with an or condition与或条件匹配的 C# 模式
【发布时间】:2019-07-29 04:17:36
【问题描述】:

在使用模式匹配时,是否可以在 if 语句中使用 OR 条件?

我有一个如下所示的模式匹配语句:

if (viewModel is StudentViewModel pageModel)
{
}

我想检查 viewModel 是 StudentViewModel 还是 ParentViewModel。是否可以在不编写 switch 语句或另一个 if 语句的情况下实现这一点?

【问题讨论】:

  • 我不明白为什么人们会否决一个真正的问题?至少在您投反对票时,如果您对为什么投反对票发表评论,那就太好了

标签: c# pattern-matching


【解决方案1】:

您可以测试 viewModel 是否是这样的两个类之一:

if (viewModel is StudentViewModel || viewModel is ParentViewModel) {
  // ... viewModel is either a StudentViewModel  or a ParentViewModel
}

【讨论】:

  • 感谢您的回复。但是您的回答忽略了 pageModel 变量。这对我来说很重要,因为它在方法中使用,并且 viewModel 是对象类型
  • 哦,是的,对不起,我错过了。由于类型检查发生在运行时,因此无法将“c is type varname”构造与 or/case 结合使用,因为变量类型可以解析为两种不同的类型。我认为最好的选择是if (viewModel is StudentViewModel pageModel) { } else if (viewModel is ParentViewModel parentModel) { }。或者,如果您确实需要共享逻辑,则可以重构类以共享父类。
  • 谢谢@spenster。感谢您的回复。我现在已经这样做了
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多