【问题标题】:using variables to call variables使用变量调用变量
【发布时间】:2012-03-26 15:02:50
【问题描述】:

嗨,我该怎么做以下?

int z = 1;
string one = "pc";
string two = z.ToString();
                    //what goes here
Console.Write("Host One:\tSent-{0}\tSuccess-{1}\tFail-{2}", xxxxx.numepings, pc1.numepings_s, pc1.numepings_f);
Console.WriteLine();

所以在我的代码中pc1 是一个对象的实例,我可以在//what goes here 行中使用什么,然后代替xxxxx,以便我可以从连接的字符串变量@987654325 中调用该实例@ 和 int 1 ??

【问题讨论】:

  • "pc1" 是一个对象的实例 - 不,实例没有名称。 pc1 是一个恰好指向特定实例的引用变量。
  • 对不起,我完全不明白你的问题。你想在这里实现什么,为什么?变量zonetwo 有什么关系?

标签: c# variables object concatenation


【解决方案1】:

基本上,你不会。您可以潜在地使用反射,但这是个坏主意。相反,当您想要存储对多个对象的引用并通过某种键(无论是索引、名称等)来处理它们时,您应该使用 集合

所以不要有:

Foo pc0;
Foo pc1;
Foo pc2;
...

你会:

List<Foo> pcs;
...
Foo pc = pcs[z]; 

【讨论】:

  • mmmm 我记得VBA里有这样的东西,不过那是很久以前的事了,得去看看。
  • 如果您想通过字符串标签/标签而不是索引来访问对象,请使用字典而不是列表。
  • @DevilWAH:是的,您可能可以从 VBA 中做到这一点——这并不意味着您应该,或者您可以在 C# 中使用相同的习语。
  • 我的意思是使用列表来保存引用的方法 :) 我只是忘了我以前做过
  • @DevilWAH:啊,我明白了。是的,我当然希望这在 VBA 中也是可能的 :)
【解决方案2】:

请看这里:http://msdn.microsoft.com/en-us/library/1fce0hc8.aspx

// Create an instance of the SomeType class that is defined in this 
// assembly.
var oh = Activator.CreateInstanceFrom(Assembly.GetEntryAssembly().CodeBase, one + z /* as a  full type name */);

// Call an instance method defined by the SomeType type using this object.
dynamic st = oh.Unwrap();

st.DoSomething(5);

你可以做这样的事情来创建一个对象,从它的字符串名称 - 但你不能毫无问题地将它转换为特定类型。

你可以作弊,但可以使用dynamic

编辑:抱歉,这最初不太正确 - 我已经修复了我的示例。

【讨论】:

  • 虽然这回答了所发布的字面问题,但我认为这是一个不好的建议。
  • 鉴于 Jons 的回复,我发现这可能不是最佳答案 - 但它仍然是明确提出的问题的答案。
  • 哈 - 同意。 :) - 但是对于寻找类似问题的答案但无法从上述建议中受益的人来说,它可能会派上用场。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2019-04-26
  • 2013-08-11
相关资源
最近更新 更多