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

次のようにする方法はありますか?

return (
    Page is WebAdminPriceRanges || WebAdminRatingQuestions
);
4

6 に答える 6

4

いいえ、そのような構文は使用できません。is演算子には 2 つのオペランドが必要です。1つ目はオブジェクトのインスタンスで、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# は英語ではありません。2 つのオペランド演算から 1 つのオペランドを省略することはできません。

于 2012-05-23T08:38:39.037 に答える
0

他の答えは真ですが、演算子の優先順位のどこに当てはまるかはわかりません。is 演算子が論理 or 演算子よりも低い場合、2 つのクラスを論理和演算することになり、意味がありません。

于 2012-05-23T08:49:58.923 に答える
0

いいえ、できません。

あなたの意図が Page を返す場合、それがorのタイプである場合にのみ、 if で簡単に行うことができます。WebAdminPriceRanges WebAdminRatingQuestions

例えば:

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

Page が参照型または少なくともnull 許容値型であると仮定する

于 2012-05-23T08:38:45.283 に答える