c# - 如何使用字符串的值作为对象的名称?
问题描述
你好。
有什么办法,我可以引用具有任何字符串值的对象吗?
Classname person1 = new Classname("John");
Classname person2 = new Classname("Martin");
string getValue = "person1";
我试过这个:Console.WriteLine(getValue.name);
显然它没有用。:(
我能做些什么来代替这个?
解决方案
您可以将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) 检索实例/检查特殊 Classname 实例的重复项,这可能是有意义的Name
- 然后将它们放入与构造相同名称的 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
}
仍然觉得这是一个相当有建设性的例子。
推荐阅读
- karate - 空手道并行运行场景大纲/示例时如何保存每个响应
- php - 自定义 Slim Not Found 处理程序取决于路线
- google-cloud-firestore - 我应该使用哪种 Firestore 数据模型策略?
- android - 使用 Espresso 运行 UI 测试,如何在 Material Design 芯片布局中引用关闭图标?
- database - 从同一张桌子上的两个不同点自动递增?
- javascript - 如何将列表中的网站交替加载到浏览器
- git - 将 repo 从 bitbucket 移至 github,但随后意外将最新更改推送到 bitbucket 而不是 github - 现在如何更新 github?
- sql - Elasticsearch 运行聚合查询 - 仅购买该产品的客户购买的产品
- javascript - 调用依赖注入并调用模块内的方法/函数
- python - 只初始化一次 mongo 副本集