You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过字符串属性匹配指定现有对象?C#对象查询咨询

解决方案:通过字典实现字符串到对象的映射

针对你需要根据输入字符串快速匹配对应对象的需求,最实用的方案是使用Dictionary<string, T>存储名称与对象的映射关系,避免大量if/else判断,且后续扩展极为方便。

修正后的完整代码

class Program
{
    static void Main(string[] args)
    {
        // 初始化字典,键为对象名称,值为对应的Notes实例,支持大小写不敏感匹配
        var noteDictionary = new Dictionary<string, Notes>(StringComparer.OrdinalIgnoreCase)
        {
            ["note"] = new Notes { Content = "note的内容" },
            ["note2"] = new Notes { Content = "note2的内容" }
        };

        Console.WriteLine("which note would you like?");
        string input = Console.ReadLine();

        // 尝试从字典中获取对应对象
        if (noteDictionary.TryGetValue(input, out var targetNote))
        {
            Console.WriteLine($"{input}'s note is {targetNote.Content}");
        }
        else
        {
            Console.WriteLine($"There is no note called {input}");
        }
    }
}

class Notes
{
    // 将字段改为公共属性,方便外部访问
    public string Content { get; set; }
}

方案优势

  • 扩展方便:后续新增Notes对象时,只需在字典中添加新的键值对,无需修改判断逻辑
  • 匹配高效:字典的查询时间复杂度为O(1),远优于大量if/else或switch的线性扫描
  • 容错性强:通过StringComparer.OrdinalIgnoreCase实现大小写不敏感匹配,用户输入Note/NOTE都能正确匹配

原代码中的关键问题说明

  1. 类级别的变量初始化必须放在方法内部(比如Main方法),不能直接写在类定义下
  2. ToUpper是方法,调用时需要加括号:which.ToUpper()
  3. 字符串判断不能使用("NOTE" || "NOTE2")的语法,正确写法应为which.ToUpper() == "NOTE" || which.ToUpper() == "NOTE2",但字典方案完全替代了这种冗余判断
  4. Notes类的notes字段默认是私有访问权限,外部无法访问,需改为公共属性
  5. which.note是错误写法——字符串类型没有note属性,必须通过名称找到对应的Notes实例后再访问其内容

内容的提问来源于stack exchange,提问作者Taxolotl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:15:28