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.
无论如何不同解决这个问题非常感谢.提前致谢.
你可以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- 您的用例应该能够证明这一缺点 - 通常有更好的方法.
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |