Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9571

C#で消せない警告

$
0
0

C#を使っていて消せない警告の一覧です。
気付いた時に随時追加していくつもりです。

概要

8月16日の++C++;管理人の岩永さんの放送で話題になったので記事を建ててみました。
https://youtu.be/-_QGGvT5FEw?t=6485

もちろん#pragma warning disableで消せますが、それは無視します。

一覧

CS0067:イベント 'event' は使用されません

Microsoft Docs

これは説明通り、イベントを作ったけど使ってない時に出る警告です。
もちろん消せるなら消せば良いんですが、イベントを含むinterfaceを継承した場合は消せませんね。
実は消せるんですかね?

publicclassShowMessageCommand:ICommand{publiceventEventHandlerCanExecuteChanged;publicboolCanExecute(objectparameter)=>true;publicvoidExecute(objectparameter){Application.ShowMessage(parameter?.ToString());}}

CS0612: 'member'は古い形式です

Microsoft Docs

これは[Obsolete]をマークしたメンバーを参照した時に出る警告です。
当然避けるべきですが、互換性維持や移行目的で旧コードにアクセスしなければいけない場合どれか一つ警告が残さないといけなかったりします。

CS1998: この非同期メソッドには「await」演算子がなく、同期して実行されます。

この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。

asyncを使う人はこれに困っている人が多いんじゃないでしょうか。
言っておきますが、ほとんどの場合これは消せます。というか一応全て消せるはずです。
具体的にはTask.CompletedTask;Task.FromResult();を使います。

Func<Task>a=async()=>{DoSomething(a);};Func<Task<bool>>b=async()=>true;

これらは以下に書き換えられます。その内リファクタリング機能が対応するでしょう。

Func<Task>a=()=>{DoSomething(a);returnTask.CompletedTask;};Func<Task<bool>>b=()=>Task.FromResult(true);

でもちょっと冗長ですよね。
例えばこれ

DoSomething(async(_)=>(null,null));

とこれ

DoSomething(_=>Task.FromResult<(Func<bool>FirstResult,Func<bool>SecondResult)>((null,null)));

だと前者を使いたくなりますよね。
これはタプルにデリゲートが絡んだ例で、型推論が効かないケースです。単なるタプルなら利いてくれたりするんですけど。
個人的に最近あった例で、その時は全部(null,null)だったので一か所にまとめましたが、そうじゃなかったら警告を残してました。

参照コンポーネント 'Microsoft.VCLibs' が見つかりませんでした。

最近しばらく出てる警告。謎です。
参照を消せば動きませんし、ほっとけば問題が出ないんで放置してます。
一応の対策としては「Nugetパッケージの復元」「ソリューションのクリーン」「.vsフォルダの削除」あたりが標準的だと思います。

最近気になってるので載せましたがこの記事の性質とはちょっと離れてますね。
Xamarin Formsでの記事
でもこの手の謎警告で消せない場合ってたまにあります。


Viewing all articles
Browse latest Browse all 9571

Trending Articles