C#代码报CS1503错误:无法将FileInfo转换为string,如何修复
报错核心原因
FileInfo是用于描述文件系统路径、大小、创建时间等元数据的类,本身不存储文件的实际文本内容,也没有内置的Split()方法- 在
CalculateLongWordsCount方法中直接写file.Split(' ')时,编译器无法在FileInfo类型上找到匹配的方法重载,会尝试将传入的FileInfo对象转换为字符串类型参数匹配系统自带的字符串Split方法,最终因类型不匹配抛出CS1503类型转换错误 - 附带的无效逻辑:代码中定义的
firstone是泛型为string的空列表,从未向列表中写入任何文件条目,后续用firstone.IndexOf(file)获取文件序号的逻辑哪怕能通过编译,也会因为列表为空、泛型类型不匹配,永远返回-1,拿不到正确的文件序号
修复步骤
- 重写
CalculateLongWordsCount方法:先通过File.ReadAllText读取对应文件的完整文本内容,拿到字符串类型的文本后,再执行Split分词、长词长度筛选、计数的逻辑,不能直接对FileInfo对象调用字符串专属方法 - 删除无效的空列表
firstone,在遍历文件时维护一个自增的序号计数器,替换原有错误的IndexOf取序号逻辑 - 可选优化:调整Split的分隔符规则,加入对换行、制表符的识别,同时过滤分词后产生的空字符串,避免空内容被计入词长统计
修复后核心代码参考
static int _MinWordLength = 7; static void Main() { DirectoryInfo filePaths = new DirectoryInfo(@"D:\project_IAD"); FileInfo[] Files = filePaths.GetFiles("*.sgm"); // 维护遍历的文件序号 int currentIndex = 0; foreach (FileInfo file in Files) { int longWordsCount = CalculateLongWordsCount(file, _MinWordLength); Console.WriteLine($"W tekscie numer: {currentIndex} liczba długich słów to {longWordsCount}"); currentIndex++; } Console.ReadLine(); } private static int CalculateLongWordsCount(FileInfo file, int minWordLength) { // 读取文件完整文本内容 string content = File.ReadAllText(file.FullName); // 按空白字符分割、过滤空字符串后统计长词数量 return content.Split(new[] {' ', '\n', '\r', '\t'}, StringSplitOptions.RemoveEmptyEntries) .Where(word => word.Length >= minWordLength) .Count(); }
内容的提问来源于stack exchange,提问作者Davyd
相关产品推荐
相关产品推荐

