-1

嗨,我遇到了一些麻烦,我在 SSIS 中有一个非常简单的脚本任务。这是我第一次使用 LINQ

string iFileName = (string)(Dts.Variables["iFileName"].Value);
string oFileName = (string)(Dts.Variables["oFileName"].Value);

try
{
   // string[] lines = File.ReadAllLines(@"\\Fcwdsqlanl01\e$\SQL_OLAP\Log\Billing_2.log");

    IEnumerable<string> stringsOut = File.ReadAllLines(iFileName)
          .Where(line => (char.IsDigit(line, 0)) && line.Contains(","))
          .Select(line => line);

    File.WriteAllLines(oFileName, stringsOut);
}
catch (Exception e)
{
    MessageBox.Show(e.Message);
}

这是我得到的错误

'System.IO.File.WriteAllLines(string, string[])' 的最佳重载匹配有一些无效参数。

我不明白为什么它的论点有问题,因为我以与 ReadAllLines 相同的方式使用它。我已经检查过了,stringsOut 变量保存了我想要的字符串数组。我意识到有一些方法可以做到这一点,而不是使用 WriteAllLines,但我想这样做,假设我错过了一些简单的东西。

4

5 回答 5

3

WriteAllLines期望 astring[]作为它的第二个参数,而你传递一个IEnumerable<string>. 那IEnumerable<string>可以指 a string[],但也可以指任何其他类型也实现IEnumerable<string>.

这应该有效:

File.WriteAllLines(oFileName, stringsOut.ToArray());
于 2013-03-11T16:07:19.943 回答
2

您正在为哪个版本的 .Net 编译?WriteAllLines接受 an作为第二个参数的重载IEnumerable<string>直到 .Net 4.0 才添加。该方法存在于 3.0 中,但只有以 astring[]作为第二个参数的重载。

于 2013-03-11T16:08:21.240 回答
1

尽管您正在ReadAllLines执行IEnumerable<string>.

尝试将您的代码更改为类似

IEnumerable<string> stringsOut = File.ReadAllLines(iFileName)
                  .Where(line => (char.IsDigit(line, 0)) && line.Contains(","))
                  .Select(line => line)
                  .ToArray();
于 2013-03-11T16:08:53.733 回答
1

'System.IO.File.WriteAllLines(string, string[])' 的最佳重载匹配

我假设您低于 .NET 4,在 .NET 4WriteAllLinesIEnumerable<string>是新的。

所以只需使用数组版本:

string[] stringsOut = File.ReadAllLines(iFileName)
    .Where(line => (char.IsDigit(line, 0)) && line.Contains(","))
    .Select(line => line)
    .ToArray();
File.WriteAllLines(oFileName, stringsOut);
于 2013-03-11T16:09:39.147 回答
1

该方法File.WriteAllLines确实将字符串数组作为第二个参数,而不是字符串

于 2013-03-11T16:09:53.493 回答