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' ステートメントを使用する」