[解決済み】C# : 'is' キーワードとNotのチェック
2022-03-27 04:10:44
質問
これは愚問ですが、このコードを使って、何かが特定のタイプであるかどうかをチェックすることができます...
if (child is IContainer) { //....
もっとエレガントな方法で "NOT" のインスタンスをチェックすることはできますか?
if (!(child is IContainer)) { //A little ugly... silly, yes I know...
//these don't work :)
if (child !is IContainer) {
if (child isnt IContainer) {
if (child aint IContainer) {
if (child isnotafreaking IContainer) {
はい、はい...愚問です...。
なぜなら、何らかの疑問があるからです のようなコードに見えますが、これはメソッドの最初にある単純な戻り値に過ぎません。
public void Update(DocumentPart part) {
part.Update();
if (!(DocumentPart is IContainer)) { return; }
foreach(DocumentPart child in ((IContainer)part).Children) {
//...etc...
解決方法は?
if(!(child is IContainer))
は、唯一の演算子です。
IsNot
演算子)。
それを行う拡張メソッドを構築することができます。
public static bool IsA<T>(this object obj) {
return obj is T;
}
にして、それを使って
if (!child.IsA<IContainer>())
そして、あなたのテーマでフォローすることができました。
public static bool IsNotAFreaking<T>(this object obj) {
return !(obj is T);
}
if (child.IsNotAFreaking<IContainer>()) { // ...
更新(OPのコードスニペットを考慮)。
実際に値を後からキャストしているのだから、単に
as
の代わりに
public void Update(DocumentPart part) {
part.Update();
IContainer containerPart = part as IContainer;
if(containerPart == null) return;
foreach(DocumentPart child in containerPart.Children) { // omit the cast.
//...etc...
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] volatileキーワードは何に役立つのでしょうか?
-
[解決済み】C#のyieldキーワードは何に使われるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] is」の反対語は?