3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【C#】enumじゃないけどそれっぽく設定ファイル読み込みユーティリティを作る

Last updated at Posted at 2021-03-17

0. INDEX

    1. 概要と目的
    1. ユーティリティを作る
    1. あとがき

1. 概要と目的

この記事のC#版。なので目的は一緒。コードアシストを使ってtypoしたくない!

という事で、App.configを使った設定ファイル読み込みユーティリティを作ります。

2. ユーティリティを作る

2.1. 動作サンプル

元々、App.configを使うつもりだったんだけど、paiza.ioでは System.Configuration.ConfigurationManager.dll が使えないようなので、急遽XMLとして読み込むように修正している。
本記事の実装とは違っているが、違和感はないハズ…

2.2. 設定ファイルの中身

App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="hoge" value="hogehoge" />
        <add key="fuga" value="12345" />
        <add key="mossari" value="fusafusa" />
    </appSettings>
</configuration>

2.3. ソースコード

readonlyもついてるしフィールドをpublicでもいいかなあとは思ったけど、このサンプルではgetterを使うようにした。お好みで変えてくだし。

Config.cs
using System;
using System.Configuration;

public class Config {
    
    private readonly string key;
    private readonly string value;

    private Config(string key)
    {
        this.key = key;
        this.value = ConfigurationManager.AppSettings.Get(key);
    }
    
    public string GetKey()
    {
        return key;
    }

    public string Get()
    {
        return value;
    }

    public static readonly Config Hoge = new Config("hoge");
    public static readonly Config Fuga = new Config("fuga");
    public static readonly Config Mossari = new Config("mossari");
}

ポイントは、最後の方に書いているこの記述が、設定ファイル1項目分として機能するところ。
文字リテラルが埋まった状態で外からは見えなくなり、利用時はVSがこのフィールド名を補完してくれるので、typoを防ぎやすいはず。(ミスれば文法エラー出るしね!)

public static readonly Config Hoge = new Config("hoge");

2.4. 使い方

Hello.cs
using System;

public class Hello {
    public static void Main(){
        Console.WriteLine(Config.Hoge.Get()); // "hogehoge"と出力
        Console.WriteLine(Config.Fuga.Get()); // "12345"と出力
        Console.WriteLine(Config.Mossari.Get()); // "fusafusa"と出力
    }
}

3. あとがき

最近C#の業務利用を始めました。個人的にはUnityでお遊びがてら書いたりはしてたのですが…。
今回の記事を書くにあたってC#は列挙型にメソッドが持てない事に気づいてJavaの便利なところだったんだなーと気づきました。

仕事上はこういうユーティリティ開発は賛否両論で、無ければ無いで開発上の問題は無い事も多いのが一因なのかなーと思います。
とはいえ、チーム開発時や、一人でも期間が開いてしまった時の開発でミスるので、個人的にはなるべくIDEのアシストを使いたいクセが付いています。

そうすると、そんな事は時間と金の無駄だという外圧との戦いが繰り広げられたりするのですが、どう説得すればよいのか日々悶々としてます。
そういう案件に限って、ズルズルと改修依頼が来ますしね。1

読み返したら単なる愚痴になってますね。この辺でやめておきます。
ではノシ

  1. 更に改修コストが高くなってくるとちゃんと設計して実装しろ的な指摘をポロっと言われて内心穏やかじゃなくなったりする。藤竜「ユ゛ー゛テ゛ィ゛リ゛テ゛ィ゛な゛ん゛か゛無゛駄゛だ゛っ゛て゛言゛っ゛て゛止゛め゛さ゛せ゛た゛じ゛ゃ゛な゛い゛で゛す゛か゛あ゛あ゛あ゛あ゛!」

3
2
1

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?