我可能错误地问了这个问题,但在这里坚持我。
我正在制作一个包含几条规则的配置管理器..所有Keys
都是字符串,但Value
可以是string
,int
,{{1 }或double
(但显示为0,1整数)
我已经编写了一个类和一些通用的东西,并且还覆盖了bool
方法来获得一个漂亮的打印模式。在包装器类中,我创建了一个操作符覆盖来获取对象。现在我正在尝试为该对象创建一个setter,但由于值的类型不匹配,我遇到了一些严重的麻烦。
ToString();
现在我怎样才能配置operator []的setter以使其实际正常工作,如果我输入,请说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 $@"{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 $@"{Key}={Value};";
}
public virtual string GetKey(bool tolower = false)
{
if (tolower)
return Key.ToLower();
else
return Key;
}
}
}
}
和ConfigLines["anintkey"] = 5;
这两件事都有效..我想是的我确实需要在某处使用ConfigLines["astringkey"] = "Hello";
,但是我没有使用太多的模板,我无法找到解决这个问题的方法。
我确实希望将原始列表保留为基类,然后从中开始工作,但我不知道如何解决这个问题。
谢谢大家的帮助!
答案 0 :(得分:1)
您可以ConfigEntry<T>
,但之后您将被迫制作包含Config<T>
的{{1}}。所以这不是解决方案。
您只需要List<ConfigEntry<T>>
:
dynamic