【问题标题】:How can I use a string's value as an object's name?如何使用字符串的值作为对象的名称?
【发布时间】:2021-01-25 06:11:42
【问题描述】:

嗨。
有什么办法,我可以用任何字符串的值来引用一个对象吗?

Classname person1 = new Classname("John");
Classname person2 = new Classname("Martin");
string getValue = "person1";

我试过这个:Console.WriteLine(getValue.name);,显然它没有用。 :(
除了这个,我还能做什么?

【问题讨论】:

  • 如果你解释一下你试图用这种方法解决的问题是什么,也许会更好。
  • 你能解释一下你为什么想要这个吗?我以前从未见过这样的事情,坦率地说,这似乎是一个坏主意,除了代码分析之外 - 但即使那样你也不会在字符串中硬编码变量名。

标签: c# oop object


【解决方案1】:

您可以将Classname 类的实例存储到字符串键下的字典中:

using System;
using System.Collections.Generic;

public class Classname
{
    public string Name { get; set; } 
    public Classname(string name) { Name = name; }
}

public static class Program
{
    public static void Main()
    {
        // store class instance under a name to be referenced later
        var dict = new Dictionary<string, Classname>
        {
            ["person1"] = new Classname("John"),
            ["person2"] = new Classname("Martin"),
        };

        Console.WriteLine(dict["person1"].Name);
    }
}

输出:

John

可能如果您有 1000 个名称并且想要检索实例/通过 O(1) 中的 Name 检查特殊 Classname 实例的重复项 - 然后将它们放入dict 与它们的构造名称相同:

var dict = new Dictionary<string, Classname>();

// use your list of names instead here
foreach (var nameNumber in Enumerable.Range(1, 2000))
{
    var name = $"Name_{nameNumber}";
    dict.Add(name, new Classname(name));
}

// dict provides O(1) access and O(1) check if already created 
// an instance with that name


// check if inside, do not retrieve
if (dict.ContainsKey("Name_155"))
    Console.WriteLine("Name_155 already constructed");

// check and retrieve, create + add if not there
var n = "Name_4000"
if (dict.TryGetValue(n, out var inst))
{
    // do smth with inst
}
else
{
    dict.Add(n, new Classname(n));
    inst = dict[n]; 
    // do smth with inst
}

仍然觉得这是一个相当构建的例子。

【讨论】:

    【解决方案2】:

    你不能。 如果您想引用多个枚举对象,只需使用您的对象创建一个数组或列表。 例如

    Classname[] classnames = {new Classname("..."), new Classname("...")};
    

    然后您可以将它们称为classnames[0]classnames[1]

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2014-06-04
      相关资源
      最近更新 更多