“是”C# 多个选项
本文关键字:选项 | 更新日期: 2023-09-27 18:35:07
return (
Page is WebAdminPriceRanges ||
Page is WebAdminRatingQuestions
);
有没有办法做到这一点,比如:
return (
Page is WebAdminPriceRanges || WebAdminRatingQuestions
);
不,这样的语法是不可能的。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 运算符,则将两个类放在一起,这是没有意义的。