タプルを使用すると複数の値を一度に受け取ることができますが
そのうちの一部の値は使わない場合、使いもしないのに変数に格納すると
この変数はどこで使うのだろうか?と疑問に思わせてしまうためよくないです

使う気がない値は明確に使わないという風に示せた方がよいのでその場合に _ をつかいます

例えば3つの値を返す関数があり、すべて使いたい場合と2つ名の値が不要な場合だと以下のように記載できます

var (a, b, c) = Hogehoge();
var (x, _, y) = Hogehoge();

static (string a, string b, string c) Hogehoge()
{
    return ("a", "b", "c");
}
投稿日時: 2025-06-14 02:03:14

クラス名の識別のため名前空間をusingして利用する形になり、それはファイルごとに都度記載することになるが

using System.Reflection;

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

他のファイルでも使う場合、globalをつけることで、全ファイルでその名前空間が参照されることになる

global using System.Reflection;

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

※これなら他のファイルでもAssemblyクラスがそのまま使える

名前のエイリアスでも同様にglobalが使えます

global using Excel = Microsoft.Office.Interop.Excel;
投稿日時: 2025-06-14 01:27:14
更新日時: 2025-06-14 01:34:14

例えば、実行ファイルのあるディレクトリを取得したい場合に以下のように書いたとします

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

そうすると、以下のように波線が表示され、 null 参照の可能性があるものの逆参照です。 という警告がでます

つまり、Assembly.GetEntryAssenbly()がnullを返す可能性があり、nullの時に .Location するとエラーになるという話です。

こういった場合に、Null条件演算子を記載しておくと、nullだった時その先のメソッドやプロパティを 実行せずにnullを返してくれエラーの回避をしてくれます

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
↓
var directoryPath = Path.GetDirectoryName(null); // これと同等

※Path.GetDirectoryNameはnullを受け取った場合そのままnullを返してくれてエラーにはならないです

パスなのでnullを返されても・・・というのはあると思うので、Null合体演算子を使って空文字にしてしまうのでもよいですね

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location) ?? "";

もうちょっと極端なケースをみるとその恩恵が強く感じられるのかもしれないのでそんな例を
たとえばあるクラスのメソッドをつなげて実行できる場合に、そのメソッドがnullを返す恐れがあると
それ以降のメソッドでエラーになるのでNull合体演算子を使うことになるのですが

var ret = new Hoge();
var val = ret.Foo()?.Bar()?.Baz();

これをNull合体演算子を使わないでかくと…
以下のようになり見づらくなってしまうって話しになります

var ret = new Hoge();
var val = ret.Foo();
if(val != null)
{
    val = val.Bar();
    if (val != null)
    {
        val = val.Baz();
    }
}
投稿日時: 2025-06-14 00:48:14

最近の投稿

最近のコメント

タグ

アーカイブ

その他