return (
Page is WebAdminPriceRanges ||
Page is WebAdminRatingQuestions
);
次のようにする方法はありますか?
return (
Page is WebAdminPriceRanges || WebAdminRatingQuestions
);
いいえ、そのような構文は使用できません。is演算子には 2 つのオペランドが必要です。1つ目はオブジェクトのインスタンスで、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# は英語ではありません。2 つのオペランド演算から 1 つのオペランドを省略することはできません。
他の答えは真ですが、演算子の優先順位のどこに当てはまるかはわかりません。is 演算子が論理 or 演算子よりも低い場合、2 つのクラスを論理和演算することになり、意味がありません。
いいえ、できません。
あなたの意図が Page を返す場合、それがorのタイプである場合にのみ、 if で簡単に行うことができます。WebAdminPriceRanges
WebAdminRatingQuestions
例えば:
if(Page is WebAdminPriceRanges || Page is WebAdminRatingQuestions)
return Page;
return null;
Page が参照型または少なくともnull 許容値型であると仮定する