“是”C# 多个选项

本文关键字:选项 | 更新日期: 2023-09-27 18:35:07

return (
      Page is WebAdminPriceRanges ||
      Page is WebAdminRatingQuestions
);

有没有办法做到这一点,比如:

return (
    Page is WebAdminPriceRanges || WebAdminRatingQuestions
);

“是”C# 多个选项

不,这样的语法是不可能的。is 运算符需要 2 个操作数,第一个是对象的实例,第二个是类型。

您可以使用GetType()

return new[] { typeof(WebAdminPriceRanges), typeof(WebAdminRatingQuestions) }.Contains(Page.GetType());

不是真的。可以在集合中查找Type实例,但这并不考虑is执行的隐式转换;例如,is 还会检测类型是否是它所操作的实例的基础。

例:

var types = new[] {typeof(WebAdminPriceRanges), typeof(WebAdminRatingQuestions)};
// this will return false if Page is e.g. a WebAdminBase
var is1 = types.Any(t => t == Page.GetType());
// while this will return true
var is2 = Page is WebAdminPriceRanges || Page is WebAdminRatingQuestions;

No.您指定的第一种方法是唯一合理的方法。

不,C# 不是英语,不能从双操作数运算中省略一个操作数。

不,你不能这样做。

如果您的目的是返回页面,则仅当它是 WebAdminPriceRanges WebAdminRatingQuestions 类型时,您可以使用 if 轻松执行此操作。

例如:

if(Page is WebAdminPriceRanges || Page is WebAdminRatingQuestions)
   return Page;
return null;

假设 Page 是引用类型或至少可为 null 的值类型

其他答案是正确的,但是虽然我不确定运算符优先级的位置。如果 is 运算符低于逻辑 or 运算符,则将两个类放在一起,这是没有意义的。