「System.IO.StreamWriter」から「CsvHelper.ISerializer」に変換できないのはなぜですか?


9

人のコンテンツをCSVファイルに書き込んでからエクスポートしようとすると、ビルドエラーが発生して失敗します。エラーは:

cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'

これが何度もこの方法で実行したことが確実でない限り、なぜこれが起こっているのかはわかりません。

private void ExportAsCSV()
{
    using (var memoryStream = new MemoryStream())
    {
        using (var writer = new StreamWriter(memoryStream))
        {
            using (var csv = new CsvHelper.CsvWriter(writer))
            {
                csv.WriteRecords(people);
            }

            var arr = memoryStream.ToArray();
            js.SaveAs("people.csv",arr);
        }
    }
}

あなたが考える理由あなたは明確でしなければならないからで変換することができるようStreamWriterISerializerStreamWriter.NET自体の一部です。特定のサードパーティパッケージのインターフェイスを実装することはできません。
Jon Skeet

1
これはCsvHelper.CsvWriter(TextWriter)範囲外であることを示唆しています。パッケージの正しいバージョンを取得していること、およびそれStreamWriterが通常のクラス(System.IO.StreamWriter)であることを再確認してください。「定義に移動」を使用しCsvWriterて再確認します。
Jeroen Mostert

@JeroenMostert csvWriterをチェックするつもりでしたか?私はそうしました、それはCsvHelper.Configurationを使用するCSVhelperクラスに属しています。CsvHelper.TypeConversionを使用します。システムの使用; System.Collectionsを使用します。System.Collections.Generic;を使用します。System.Dynamicを使用します。System.Globalizationを使用します。System.IOを使用します。System.Threading.Tasksを使用します。
Andy Stav

はい、しかしコンパイラがあなたに言っていることは、それがをCsvWriterとるコンストラクタを呼び出していることでありISerializer、変換がないので失敗しています。それを拾っているはずCsvWriter取るコンストラクタTextWriterいるので、StreamWriter(何らかの理由で)ので、いずれかのコンストラクタが欠落していること、それから、継承やコンパイラのオーバーロードの解決が壊れている(少しは劣勢を、しかし奇妙事が起きています)。
Jeroen Mostert

回答:


29

バージョン13.0.0には重大な変更がありました。ローカリゼーションには多くの問題があるため、@ JoshCloseでは、ユーザーが使用するものを指定する必要がありますCultureInfo。とをCultureInfo作成するときに含める必要がCsvReaderありCsvWriterます。 https://github.com/JoshClose/CsvHelper/issues/1441

private void ExportAsCSV()
{
    using (var memoryStream = new MemoryStream())
    {
        using (var writer = new StreamWriter(memoryStream))
        {
            using (var csv = new CsvHelper.CsvWriter(writer, System.Globalization.CultureInfo.CurrentCulture)
            {
                csv.WriteRecords(people);
            }

            var arr = memoryStream.ToArray();
            js.SaveAs("people.csv",arr);
        }
    }
}

注: CultureInfo.CurrentCulture以前のバージョンではデフォルトでした。

検討する

  • CultureInfo.InvariantCulture-ファイルの書き込みと読み取りの両方を制御する場合。そうすれば、ユーザーがコンピューター上でどのような文化を持っているかに関係なく機能します。
  • CultureInfo.CreateSpecificCulture("en-US")- ユーザーのカルチャーに関係なく、特定のカルチャーで機能する必要がある場合。

David * works for v15.0.0
Konstantin Malikov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.