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

有没有办法做到这一点:

return (
    Page is WebAdminPriceRanges || WebAdminRatingQuestions
);
4

6 回答 6

4

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

你可以使用GetType()

return new[] { typeof(WebAdminPriceRanges), typeof(WebAdminRatingQuestions) }.Contains(Page.GetType());
于 2012-05-23T08:38:34.823 回答
4

并不真地。您可以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;
于 2012-05-23T08:38:36.260 回答
2

不,您指定的第一种方式是唯一合理的方式。

于 2012-05-23T08:39:19.103 回答
1

不,C# 不是英语语言,您不能在二操作数运算中省略一个操作数。

于 2012-05-23T08:38:39.037 回答
0

不,你不能这样做。

如果您的意图是返回一个页面,只有当它是 or 类型WebAdminPriceRanges WebAdminRatingQuestions,您可以使用 if 轻松完成。

例如:

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

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

于 2012-05-23T08:38:45.283 回答
0

其他答案是正确的,但是虽然我不确定在哪里适合运算符优先级。如果 is 运算符低于逻辑或运算符,那么您会将两个类放在一起,这是没有意义的。

于 2012-05-23T08:49:58.923 回答