return (
Page is WebAdminPriceRanges ||
Page is WebAdminRatingQuestions
);
有没有办法像:
return (
Page is WebAdminPriceRanges || WebAdminRatingQuestions
);
答案 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运算符低于逻辑运算符或运算符,则将两个类放在一起,这是没有意义的。