我正在使用Dictionary<string, string>作为乐器的配置,对于那些对编程知之甚少的用户来说,能够从Visual Studio中获得自动完成功能会更容易.
在Python中,我可以创建一个Dictionary并使用点运算符访问不同的值.
d = {'name':'Joe', 'mood':'grumpy'}
d.name
d.mood
Run Code Online (Sandbox Code Playgroud)
C#有办法做到这一点吗?
我意识到所有涉及的问题,因为字典只是一个通用集合(如何通用?它只是一个KeyValuePairs列表?有趣的问题).我不打算为此完成它的包装类(我希望它比使用自定义类的显式属性更灵活).
您已经可以在 C# 中使用匿名类型做到这一点:
var d = new { name = "Joe", mood = "grumpy"};
d.name
d.mood
Run Code Online (Sandbox Code Playgroud)
或真实类型:
var d = new Person { Name = "Joe", Mood = "grumpy"};
d.Name
d.Mood
Run Code Online (Sandbox Code Playgroud)
而且,在 C# 4.0 中,我们将拥有 DLR,它允许在运行时使用ExpandoObject添加属性:
dynamic d = new ExpandoObject();
d.name = "Joe";
d.mood = "grumpy";
Run Code Online (Sandbox Code Playgroud)
但是,我不确定您是否可以在 C# 中使用静态分析来执行 IntelliSense。
与您拥有的最接近的 C# 是
var d = new Dictionary<string, string>()
{ { "name", "Joe" }, { "mood", "grumpy" } };
d["name"]
d["mood"]
Run Code Online (Sandbox Code Playgroud)
这将不支持 IntelliSense。
如果您正在制作 API,我会使用真实类型。