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

C#中使用自定义类作为Dictionary值时实例化报错,求解决方案

问题分析与解决:Dictionary值类型为自定义类时的构造函数错误

错误原因

你这段代码运行报错的核心问题是:自定义类myMovies没有定义接收两个字符串参数的构造函数。C#中,类默认仅提供无参的默认构造函数,当你尝试通过new myMovies("x", "x")创建实例时,编译器找不到匹配的构造函数,因此抛出编译错误。而使用<string, string>类型的Dictionary时,string本身支持通过字符串字面量或带参数的构造函数创建实例,所以代码能正常运行。

修正方案

有两种方式可以解决这个问题:

方案1:为自定义类添加带参数的构造函数

显式定义匹配参数的构造函数,让编译器能够识别new myMovies("x", "x")的调用:

public class myMovies
{
    // 新增带参数的构造函数
    public myMovies(string name, string year)
    {
        Name = name;
        Year = year;
    }
    
    public string Name { get; set; }
    public string Year { get; set; }
}

Dictionary<string, myMovies> file_dict = new Dictionary<string, myMovies>();

foreach (string file in Directory.GetFiles(path1, "*.mkv", SearchOption.AllDirectories))
{
    file_dict.Add(file, new myMovies("x", "x"));
}

方案2:使用对象初始化器(无需额外构造函数)

利用C#的对象初始化器语法,通过无参构造函数创建实例后直接为属性赋值:

public class myMovies
{
    public string Name { get; set; }
    public string Year { get; set; }
}

Dictionary<string, myMovies> file_dict = new Dictionary<string, myMovies>();

foreach (string file in Directory.GetFiles(path1, "*.mkv", SearchOption.AllDirectories))
{
    // 使用对象初始化器为属性赋值
    file_dict.Add(file, new myMovies { Name = "x", Year = "x" });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:45:43