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
相关产品推荐
相关产品推荐

