Visual Studio 2022 - エラー・警告 - 警告 IDExxxx


 クラウディア


1. 概要
2. IDE0017
3. IDE0019
4. IDE0028
5. IDE0044
6. IDE0057
7. IDE0059
8. IDE0060
9. IDE0063
10. 参考サイト

1. 概要

 ここでは、わたしが遭遇した、「Visual Studio 2022」での警告について、内容や対処方法について、記述します。  ここでの対処方法は、あくまでも応急処置的なものなので、実際に有効となる対処方法は、プログラムの全体を見る必要があります。

2. IDE0017

 下記のようなメッセージが表示されます。
オブジェクトの初期化を簡素化できます
 下記のような構文で発生します。

var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";
 初期化は、下記のように書けば、簡略化できるという。

var person = new Person{ FirstName = "John", LastName = "Doe" };
 この場合、警告というよりは、提案ですかな?

3. IDE0019

 下記のようなメッセージが表示されます。
パターン マッチングを使用します
 下記のような構文で発生します。

Button? senderbtn = sender as Button;

if (senderbtn != null)
{
	return;
}
 下記のように修正します。

if (sender is Button senderbtn)
{
	return;
}

4. IDE0028

 下記のようなメッセージが表示されます。
コレクションの初期化を簡素化できます
 下記のような構文で発生します。

List intList = new List();
Dictionary freqDict = new Dictionary();
 下記のように修正します。

List intList = [];
Dictionary freqDict = [];
 あるいは、下記のようなクラスを。

public struct ObjectId
{
    internal long id;
}

public class NameListItem
{
    public string Name { get; set; }
    public ObjectId ObjectID { get; set; }

    public NameListItem(string oname, ObjectId oid)
    {
        Name = oname;
        ObjectID = oid;
    }
}

public class NameList : List<NameListItem>
{
    public void Add(string name, ObjectId oid)
    {
        try
        {
            base.Add(new NameListItem(name, oid));
        }
        catch (System.Exception)
        {
            throw;
        }
    }
}
 宣言するときも。

NameList someList = new NameList();
 同じ表示になりますので、下記のように宣言します。

NameList someList = [];

5. IDE0044

 下記のようなメッセージが表示されます。
フィールドを読み取り専用にします
 下記のような構文で発生します。

private int id;
 変数に対して、代入が発生しない場合に表示されます。  「readonly」修飾子をフィールド宣言に追加します。

private readonly int id;

6. IDE0057

 下記のようなメッセージが表示されます。
Substring を簡素化できます
 下記のような構文で発生します。

int eqIndex = s.IndexOf('=');
string title = s.Substring(0, eqIndex);
 下記の構文にすると、メソッドを呼ばない分、効率化できるらしい。

int eqIndex = s.IndexOf('=');
string title = s[..eqIndex];

7. IDE0059

 下記のようなメッセージが表示されます。
値の 'v' への不必要な代入
 下記のような構文で発生します。

int v = Compute();
v = Compute2();
 これは、不要な代入への警告ですな。  最初の行の「v」への代入には、意味がありませんでな。  本当に意味のない場合は、下記の行だけにします。

int v = Compute2();
 そうでなく、なんらかの意味があって代入し、その後、破棄する予定であれば。

_ = Compute();
int v = Compute2();
 という書き方をするそうな。  「_」は、「C#」では、破棄変数というそうな。

8. IDE0060

 下記のようなメッセージが表示されます。
未使用のパラメーター 's' が同梱のパブリック API の一部ではない場合に削除します
 下記のような構文で、引数「s」が、一度も使われていない場合に表示されます。

public static void sumeMethod(string s)
 本当に、「s」を使わないのであれば、引数「s」は削除します。

9. IDE0063

 下記のようなメッセージが表示されます。
'using' ステートメントは簡素化できます
 下記のような構文で発生します。

using (FileStream fs = new FileStream(@"./Hello.txt", FileMode.Append, FileAccess.Write, FileShare.Write))
{
    using (StreamWriter w = new StreamWriter(fs))
    {
        w.WriteLine(@"Hello FileStream");
    }
}
 上記の構文に慣れているんだがな・・・。  これは、「C# 8.0」では、下記のように書けるそうで、そちらの方が推奨されるらしい。

using FileStream fs = new FileStream(@"./Hello.txt", FileMode.Append, FileAccess.Write, FileShare.Write);
using StreamWriter w = new StreamWriter(fs);
w.WriteLine(@"Hello FileStream");
 ほんまに同じ動きになるんかいな。  まだ、検証していません。

10. 参考サイト

 本ページは、下記のサイトおよび「Google」大先生を参考にさせていただきました。
IDE0059」
「IDE0063: 単純な 'using' ステートメントを使用する

サウンドハウス
AbemaTV 無料体験
ハイスピードプラン
健康サポート特集
JETBOY
葬送のフリーレン Prime Video