私は間違って質問したことがあるかもしれませんが、ここに私に付いているかもしれません。継承クラスの同じ名前の異なるプロパティを設定する方法
私はルールのカップルを持っているConfiguration Managerを作っています。..すべてKeys
は文字列ですが、Value
はstring
、int
、double
またはbool
(しかし、0,1の整数として示されている)のいずれかになります
私は」私はクラスといくつかの一般的なものを書いてまた、ToString();
メソッドをオーバープリントして素敵な印刷パターンを取得し、ラッパークラスでオブジェクトを取得するためにオペレータオーバーライドを作成しました。今私は、そのオブジェクトのセッターを作成しようとしていますが、値の型が一致していないので、私はいくつかの深刻な問題を抱えている。..
public class Config()
{
public List<ConfigEntry> ConfigLines {get;set;}
public ConfigEntry this[string key]
{
get
{
if(CfgConfig.Any(x => x.GetKey(true) == key))
{
return CfgConfig.Where(x => x.GetKey(true) == key).Single();
}
if (ProfileConfig.Any(x => x.GetKey(true) == key))
{
return ProfileConfig.Where(x => x.GetKey(true) == key).Single();
}
return null;
}
set
{
//??????????????
}
}
public class ConfigEntry()
{
public string CommonStuff {get;set);
public virtual string GetKey(bool tolower = false)
{
return null;
}
public override string ToString()
{
return CommonStuff;
}
public class TextValue : ConfigEntry
{
public string Key {get;set;}
public string Value {get;set;}
public override string ToString()
{
return [email protected]"{Key}={Value};";
}
public virtual string GetKey(bool tolower = false)
{
if (tolower)
return Key.ToLower();
else
return Key;
}
}
public class IntValue : ConfigEntry
{
public string Key {get;set;}
public int Value {get;set;}
public override string ToString()
{
return [email protected]"{Key}={Value};";
}
public virtual string GetKey(bool tolower = false)
{
if (tolower)
return Key.ToLower();
else
return Key;
}
}
}
}
は今どのように私は、[オペレータのセッターを設定することができ]これが実際に正常に動作するためには、私がタイプすると、ConfigLines["anintkey"] = 5;
とConfigLines["astringkey"] = "Hello";
と言うことができます。私は<T> class
をどこかで使う必要があると思いますが、テンプレートをあまり使用していませんこれを取り除く方法を見つけ出すことはできません。 元のリストをベースクラスとして保持し、それから作業したいと思いますが、私はこれをどのように取り除くのか手がかりがありません。
ありがとうございました!
私はアプリの私の古いバージョンで辞書を使用しますが、私は今、より堅牢なソリューションのために行くよ...動的な値は、実際に問題を修正すること、Iこの仕事のようなセッターを確認するだけです – DethoRhyne
最も堅牢なソリューションは、必要なすべてのオプションでConfigクラスを作成することです。動的なものを使いたくない場合は、 'conf [" url "] =" http://example.com "; conf [" timeout "] = 30;' – Anton
これはあなたと同じように動作します私の状況には完璧だったと言いました。ありがとうございました! :)私は辞書を作っていないことを除いて、それを複数の継承クラスのオブジェクトとして残し、単純にValueプロパティを動的型にしました – DethoRhyne