参数 1:无法从 System.IO.FileInfo 转换为 'string'


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace FunkcjaSpilit
{
class Program2
{
static int _MinWordLength = 7;
static void Main()
{
DirectoryInfo filePaths = new DirectoryInfo(@"D:project_IAD");
FileInfo[] Files = filePaths.GetFiles("*.sgm");
List<string> firstone = new List<string>();

foreach (FileInfo file in Files)
{
int longWordsCount = CalculateLongWordsCount(file, _MinWordLength);
Console.WriteLine("W tekscie numer: " + firstone.IndexOf(file) + " liczba długich słów to " + longWordsCount);
}
Console.ReadLine();
}
private static int CalculateLongWordsCount(FileInfo file, int minWordLength)
{
return file.Split(' ').Where(wordInText => wordInText.Length >= minWordLength).Count();
}
}
}

运行此代码后,将出现错误:(本地变量(FileInfo文件CS 1503:参数1:无法从系统转换。IO.FileInfo到"string">如何修复?

我在代码中看到了两个问题。这两者都源于不了解FileInfo结构的用途。我会修正其中一个错误,让你从我的修正中学习,自己做第二个错误。

private static int CalculateLongWordsCount(FileInfo file, int minWordLength)
{
return File.ReadLines(file.FullName).
Select(line => line.Split(' ').Count(word => word.Length > minWordLength)).
Sum();
}

你也可以使用File.ReadAllText(),它会更简单,更像原始代码,但我更喜欢ReadLines(),因为它至少可以提供一些保护,防止大文件破坏你的内存。

另一个问题是这个表达式:

firstone.IndexOf(file)

但是,我还是把这个问题留给您来解决,这样您就一定能理解如何使用FileInfo结构。与FileInfo问题不同,此表达式也将始终返回-1,因为从未向firstone列表中添加任何数据。

最新更新