仕事でつかえる! C# ノウハウ part 1
2019-09-25
azblob://2022/11/11/eyecatch/2019-09-24-c-sharp-know-how-to-help-you-work-part1-000.jpg

part 2 以降があるか分かりませんが、新人教育でコードレビュー時に指摘した内容を振り返り、C# のノウハウ(もしくはプログラミングのノウハウ)を書いていこうと思います。
学校などで知識を得ることも非常に重要ではありますが、実際にコードを書いていくといくつもの壁にぶつかったり、自ら壁を作ってしまうことがあります。そういったことを乗り越えるために実践的なノウハウを雑多に書いてみます。

頭の片隅に置いていただけたらと思います。

DateTime の便利なプロパティ

DateTime というクラスがあります。
日時を保管できるものですが、プロパティを参照すると現在日時に関する情報が取得できます。

  • DateTime.Now :現在日時(時刻もそのまま含む)
  • DateTime.Today :現在日付(時刻を含まない日付情報)

日時の扱いにご用心

グローバル対応のアプリケーションや、海外向けのアプリケーションを実装する際は下記の点に注意が必要です。

  • 日本と海外では時差があることを意識した実装ができているか?
  • サマータイムを意識した実装ができているか?

上記の DateTime クラスだけではこの辺りに対応できない可能性があります。
要件に従い、タイムゾーンを使用して日付を変換したり、 DateTimeOffset クラスを活用したりしましょう。

LINQ のメソッドは using しないと候補に出ない

リストや配列を表すオブジェクトを使用しているとき、Where<T>ToList() などの LINQ のメソッドが無条件で使えそうな気がしてしまいますが、実は下記の using が無いと使えません。

using System.Linq;

ソリューション エクスプローラーからクラスファイルを作成すると自動で追加されますが、まっさらなファイルでコードを書き始めたり、LINQ を使っていない状態のコードで「Using の削除と並び替え」とかやってしまうといつの間にか消えていて、アレレレ…となります。

Visual Studio 2019 とかだと、ToList() を強引に書いてしまってから左の電球アイコンを押せば using を追加するサジェストを出してくれます。
※ 昔のは教えてくれませんでした。便利になりましたね。

属性 (Attribute) の活用

今どきは学校で習うものかもしれませんが、私が学生の頃は存在も知りませんでした。
属性を使用することで、クラスやプロパティなどに追加情報を与えることができます。

分かりやすいものは Obsolete 属性でしょうか。
下記のように書くと、「そのメソッドは存在しているけど、もう推奨しないので使わないで欲しいな」という情報を与えることができます。これによってビルド時にこのメソッドを呼び出しているコードを検出すると警告が表示されるようになります。

public class OldClass
{
    [Obsolete("今どきの実装ではないので、もう使わないでください")]
    public void VeryOldMethod()
    {
        /* メソッドの実装 */
    }
}

ASP.NET MVC 等、Web アプリを実装する際は属性を多用しますので、サンプルコード等の [] で囲まれた記述を変に省略せず、意味を確認しておきましょう。