LoginSignup
8
4

More than 1 year has passed since last update.

【C#】outキーワードはif文専用ではなかった

Last updated at Posted at 2022-06-11

はじめに

Visual Studioでコーディングしているとき、エラー一覧から「メッセージ」を有効にしておくと、
「privateのフィールドの変数名が大文字から始まっている」といったコーディング規約なども確認してくれるため結構便利。

その機能を見ながらコーディングしていたら気がついたことがあったため共有する。

outキーワード

例えば次のようなコードを入力していたら、Visual Studioから下記アドレスの提案が出てくる。

int parced = 0;
if (int.TryParse("123", out parced))
{
    Console.WriteLine(parced);
}

簡単に言うと、outキーワードを使って無駄な宣言を省略できる。

if (int.TryParse("123", out int parced))
{
    Console.WriteLine(parced);
}

マイクロソフトのリファレンスでもこの使い方しか書かれていなかったが、もう一つ便利な使い方があった。

outキーワード+三項演算子+LINQ

outキーワードで変数を定義する方法は、別にif文の中に限ったことではなく、
ほぼ同じことを行っている三項演算子でももちろん使用することができる。

三項演算子は乱用すると可読性が落ちやすく、短文であることが意味を持つような場面で使うことが望まれる。
そんな条件をぴったり満たすような場面といえば?LINQだね。

という訳で、いまいち信用ならない文字列群に対する変換用途でLINQを使ってみたらこうなった。
若干極端だが、中に愚直にコードを書いた例をコメントアウトに書いておいたが、このレベルでは可視性が段違いだと思われる。

List<string> inputted = new List<string> { "123", "abc", "456"};
var output = inputted.Select(s => int.TryParse(s, out int parsed) ? parsed : 0).ToList();
// var output = inputted.Select(s => {if (int.TryParse(s, out int parsed)){ return parsed;} else {return 0;}}).ToList();
// {123, 0, 456}

他になにか良い例があったら教えて下さい。

8
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4