レジスターをキーにしたCParamの辞書があります。
CParamには外部テキストファイルから読み取られるフィールドが1つあり、HumanDescで読み取るためのキーとしてDescriptionが使用されます。
テキストファイルは翻訳ファイルであり、説明は文字列である必要があります。このようなもの
PLACE_HOLDER1 "First Place where things are put"
PLACE_HOLDER2 "Secod Place where things are put"
.....
Register asを挿入し、引用符で囲むことで、これを簡単に行うことができます。しかし、何百ものレジスターがあり、それは退屈です(そしてあまりエレガントではありません)。コンストラクターが私のためにそれを処理できる方法はありますか?
以下は、私がやろうとしていることの非常に単純化された例です。
using System;
using System.Collections.Generic;
namespace Var2String
{
public class CParam
{
public ushort Register;
public string Description;
public ushort Content;
public string HumanDesc;
public CParam(ushort t_Register, string t_Description, string t_HumanDesc, ushort DefaultVal)
{
Register = t_Register;
Description = t_Description;
Content = DefaultVal;
HumanDesc = t_HumanDesc;
}
};
static class Device1
{
public const ushort PLACE_HOLDER1 = 0x0123;
public const ushort PLACE_HOLDER2 = 0x0125;
public const ushort PLACE_HOLDER_SAME_AS_1 = 0x0123;
public static Dictionary<ushort, CParam> Registers;
static Device1()
{
Registers = new Dictionary<ushort, CParam>()
{
{PLACE_HOLDER1, new CParam(PLACE_HOLDER1,"PLACE_HOLDER1","Place One Holder",100)},
{PLACE_HOLDER2, new CParam(PLACE_HOLDER1,"PLACE_HOLDER2","Place Two Holder",200)}
};
/*
* Like to be able to do this
* And constructor CParam
Registers = new Dictionary<ushort, CParam>()
{
{PLACE_HOLDER1, new CParam(PLACE_HOLDER1,"Place One Holder",100)},
{PLACE_HOLDER2, new CParam(PLACE_HOLDER1,"Place Two Holder",200)}
};
*/
}
}
class Program
{
static private string LookUpTranslationFor(string Key)
{
string Translated = "Could not find Val for " + Key;
//This would read XML file use Key to get translation
return Translated;
}
static void Main(string[] args)
{
Console.WriteLine(Device1.Registers[Device1.PLACE_HOLDER1].HumanDesc);
Console.WriteLine(Device1.Registers[Device1.PLACE_HOLDER2].HumanDesc);
Device1.Registers[Device1.PLACE_HOLDER2].HumanDesc = LookUpTranslationFor(Device1.Registers[Device1.PLACE_HOLDER2].Description);
Console.WriteLine(Device1.Registers[Device1.PLACE_HOLDER2].HumanDesc);
Console.ReadKey(true);
}
}
}