3

ハードコーディングされた値のテーブルを使用するプログラムがあります。例えば

    public static readonly IDictionary<SpecBuild, BuildInfo> Builds = new Dictionary<SpecBuild, BuildInfo> {
            { SpecBuild.WarriorArms,
                    new BuildInfo {
                            Class = Class.Warrior,
                            Name = "Arms",
                            Role = Role.Melee
                    }
                    },
            { SpecBuild.WarriorFury,
                    new BuildInfo {
                            Class = Class.Warrior,
                            Name = "Fury",
                            Role = Role.Melee
                    }
                    },
            { SpecBuild.WarriorProtection,
                    new BuildInfo {
                            Class = Class.Warrior,
                            Name = "Protection",
                            Role = Role.Tank
                    }
                    }, ...

このデータはめったに変更されないため、ハードコーディングしても問題ありません。問題は、このデータを読み取るのが難しいことと、Resharper が別の方法で再フォーマットするため、フォーマットが機能しないことです。

理想的には、この情報をテーブルとして表示し、コンパイル プロセスの一部としてそれらのテーブルの C# コードを生成するか、MSIL (CLR) に直接コンパイルするカスタム VS2010 ビューアーを備えた特別な形式のファイルが必要です。

私はターンキー ソリューションを探しています。問題は追加の開発を保証するほど深刻ではありません。

4

4 に答える 4

2

私は、このタイプのデータを (おそらく resx を介して) ファイルにプッシュします (そして何度も)。次に、選択したデシリアライザーを介してデータをロードします。簡単に編集する必要がある場合は、おそらく JavaScriptSerializer または JSON.NET 経由の JSON です。データとパフォーマンスが鍵となる場合は、よりハードコアなもの (おそらくバイナリ) になる可能性があります。もちろん、XML も実行可能な選択肢です。

シナリオで保証されている場合、他のオプションには組み込みデータベースが含まれる場合があります。

于 2011-05-20T16:11:14.047 に答える
0

Resharper ではファイルを拡張子で除外できるので、ファイルに *.data.cs という名前を付け、必要に応じてデータをフォーマットすると、resharper は再フォーマットしません。

于 2011-06-17T21:33:51.923 に答える
0

理想的には、カスタム VS2010 ビューアーを備えた特別な形式のファイルが必要です

これは完全に可能です:

  • DSL を作成する
  • DSL をサポートする VS2010 拡張機能を作成する
  • ビルドを実行するツールを作成する (MSBuild タスク)
  • ツールを使用して VS インストールを更新するインストーラーを記述します。

もちろん、それを行う方法を理解するには多くのことを学ぶ必要があります。

多くの開発者が同じタイプの情報を使用する多くのアプリケーションがある場合、それは理にかなっています。それ以外の場合は、他のオプションがあります。

  1. Resharper を再フォーマットしないように構成します (これは可能だと思います)。
  2. VS が既に編集できるデータ形式 (テキスト、XML、JSON など) を使用します。ビルド時にリソースとして追加し、アプリケーションの起動時 (またはオンデマンド) にオブジェクト グラフを作成するツールを作成します。

明らかに #1 (可能性のある) は最も単純ですが、脆弱です。#2 は十分に確立されています。これがリソースの処理方法です (XAML も可能です)。

于 2011-05-20T16:12:22.533 に答える
0

で設計時の T4 テキスト テンプレートを作成できます。

void SpecBuild(string spec, string @class, string name, string role)
{
    Write(string.Format("{{ SpecBuild.{0}, " +
                        "new BuildInfo {{ " +
                        "Class = Class.{1}, " +
                        "Name = @\"{2}\", " +
                        "Role = Role.{3} " +
                        "}} " +
                        "}},",
                        spec,
                        @class,
                        name.Replace("\"", "\"\""),
                        role));
}

//        SpecBuild            Class      Name          Role
//        -------------------- ---------- ------------- -------
SpecBuild("WarriorArms",       "Warrior", "Arms",       "Melee");
SpecBuild("WarriorFury",       "Warrior", "Fury",       "Melee");
SpecBuild("WarriorProtection", "Warrior", "Protection", "Melee");
//        -------------------- ---------- ------------- -------
于 2011-05-20T16:14:51.760 に答える