“是”c#多个选项

时间:2012-05-23 08:35:54

标签: c# c#-4.0

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

有没有办法像:

return (
    Page is WebAdminPriceRanges || WebAdminRatingQuestions
);

6 个答案:

答案 0 :(得分:3)

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

您可以使用GetType()

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

答案 1 :(得分:3)

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

示例:

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;

答案 2 :(得分:1)

不,C#不是英语,你不能在双操作数操作中省略一个操作数。

答案 3 :(得分:1)

没有。您指定的第一种方式是唯一合理的方法。

答案 4 :(得分:0)

不,你不能这样做。

如果您的意图返回一个页面,,如果它是WebAdminPriceRanges WebAdminRatingQuestions类型,你可以轻松地使用if。

例如:

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

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

答案 5 :(得分:0)

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