0

我有一个格式如下的设置文件:

[Database]
Host=localhost
Username=root
Password=root

现在,我有一个名为的类SettingsDynamicObject所以我可以使用动态设置。当我解析文件时,包含设置的字典的键是标题+键。因此,例如,Host案例中的键是Database.Host,值是localhost

现在,我希望用户像这样使用它:

dynamic settings = new Settings("Config.ini");

string host = settings.Database.Host;

但是,当我覆盖时TryGetMemberGetMemberBinder只包含Name,并且Name是 Database 而不是 Database.Host 应该是。我怎样才能“分割”GetMemberBinder Name财产?当我使用.Name属性时,它不包含..

例如

当我使用:

settings.Database.Host

然后

GetBinderName Name仅包含数据库,但应包含:

数据库.主机。

谢谢。

**编辑:**我还有一个问题。假设我有字符串名称 =“数据库”,然后我执行 settings.Name.Host。它不会将名称解析为数据库。有解决办法吗?

4

1 回答 1

0

settings.Database 是一个对象而不是动态对象,您无法控制它。编写 settings.Database_Host 是一个简单的解决方案,甚至不如 settings.Database.Host 漂亮。

如果您不知道该部分,只知道属性,您仍然可以在解析器中“作弊”:如果属性以特殊字符串(例如 __)开头,则意味着搜索所有部分:settings.__Host 应该找到 Host 条目[Database] 或 [Server] 或任何其他位置下的值。在这种情况下,您甚至可以在 TryGetMember 中返回 string[],而不是根据需要返回第一个匹配项。

于 2014-08-14T06:44:31.387 回答