使用.(点)运算符使用动态关键字得到字典值,这可能吗?

The*_*ask 3 .net c# variables arguments

我有以下课程:

public class foo
    {
        public Dictionary<string, string> data = new Dictionary<string, string>();

        public foo(params object[] args)
        {
            foreach (object arg in args)
            {
                data.Add(arg.ToString(), "..");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我需要使用点operadotor得到字典的值,因为我将类设置为参数的类使用dynamic关键字在类上"走".

例如:

 var args = new[] {"a","b","c"};
 var Foo = new foo(args);
 var baa = Foo.data.a;
 Console.Write(baa); // .. 
Run Code Online (Sandbox Code Playgroud)

如果存在一种制作动态变量的方法,例如:

public foo(params object[] args) {
foreach (object arg in args) {
  var name = (string) arg;
  var value = "..";
  MakeVariable(name, value);  
}
}
Run Code Online (Sandbox Code Playgroud)

将名为of的变量arg 和值..作为类的public成员foo.

无论如何不同解决这个问题非常感谢.提前致谢.

Bro*_*ass 7

你可以Foo继承自DynamicObject:

public class Foo : DynamicObject
{
    private Dictionary<string, string> data = new Dictionary<string, string>();

    public Foo(params object[] args)
    {
        foreach (object arg in args)
        {
            data.Add(arg.ToString(), "..");
        }
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (data.ContainsKey(binder.Name))
        {
            result = data[binder.Name];
            return true;
        }
        return base.TryGetMember(binder, out result);
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用它,您可以使用dynamic以保存以下实例Foo:

var args= new[] { "a", "b", "c" };
dynamic foo = new Foo(args);
var myA = foo.a; //returns ".."
Run Code Online (Sandbox Code Playgroud)

请记住,由于必须使用,您将失去类型安全性dynamic- 您的用例应该能够证明这一缺点 - 通常有更好的方法.