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;
不,您指定的第一种方式是唯一合理的方式。
不,C# 不是英语语言,您不能在二操作数运算中省略一个操作数。
不,你不能这样做。
如果您的意图是返回一个页面,只有当它是 or 类型WebAdminPriceRanges
时 WebAdminRatingQuestions
,您可以使用 if 轻松完成。
例如:
if(Page is WebAdminPriceRanges || Page is WebAdminRatingQuestions)
return Page;
return null;
假设 Page 是引用类型或至少可以为空的值类型
其他答案是正确的,但是虽然我不确定在哪里适合运算符优先级。如果 is 运算符低于逻辑或运算符,那么您会将两个类放在一起,这是没有意义的。