C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: CsvHelper Index設定


(過去ログ 176 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■101341 / inTopicNo.1)  CsvHelper Index設定
  
□投稿者/ ゆき (4回)-(2023/02/07(Tue) 12:36:45)

分類:[C#] 



 visualStudio2019 C# CsvHelper29.0

 いつもお世話になってます。

 CsvHelperを使って、格納クラスのIndex[]の値をConfigファイルから変更できるようしたく
 
 class Csv
{
   Index[0]
   public string Id {get;set;}
   Index[1]
   public string Name {get;set;}
   Index[2]
   public string Age {get;set;}
}

 []内の値をConfigurationManager.AppSettingsで設定したいのですが

                               //出来たらここをint型にしたい
        private static readonly string idClm = ConfigurationManager.AppSettings["ID"];

 [Index(int.Parse(idClm))] //idClm = 0

 このように指定したいのですが波線で怒られてしまします。

 格納クラスでの設定の仕方等ありましたら助言お願い致します。
 

引用返信 編集キー/
■101342 / inTopicNo.2)  Re[1]: CsvHelper Index設定
□投稿者/ WebSurfer (2624回)-(2023/02/07(Tue) 12:45:48)
No101341 (ゆき さん) に返信

> [Index(int.Parse(idClm))] //idClm = 0
>
> このように指定したいのですが波線で怒られてしまします。

その「破線」とやらは何といって怒っておるのですか?

エラーメッセージをきちんと書くのは質問する際の基本のキですよ。それだけで
原因と対策が分かる場合だってあるのです。
引用返信 編集キー/
■101343 / inTopicNo.3)  Re[2]: CsvHelper Index設定
□投稿者/ ゆき (5回)-(2023/02/07(Tue) 12:56:15)
No101342 (WebSurfer さん) に返信
> その「破線」とやらは何といって怒っておるのですか?

属性引数は、定数式、typeof式、または属性パラメータ型の配列の生成式でなければなりません
と出ています。

Form.cs と class.csがあり、Form.csで

        private static readonly string idClm = ConfigurationManager.AppSettings["ID"];

を指定してForm.cs上でこの変数を使うのはできるのですが、class.csでの使い方がわかりません。

引用返信 編集キー/
■101344 / inTopicNo.4)  Re[3]: CsvHelper Index設定
□投稿者/ Hongliang (1272回)-(2023/02/07(Tue) 14:28:48)
属性は、メッセージの通り定数(コンパイル時に決まる値)でないといけないので、実行時に他所から読み取って設定するということはできません。
CsvHelperで動的にその辺を変更する場合、属性ではなくClassMapを使用して設定することになります。
https://zenn.dev/microsoft/articles/generate-dynamic-columns-csv
ここの「CsvHelper の基本的な使い方」というところを参考にしてみて下さい。
.Index(x)に与えるxをSettingsから読み取った値にすればいいでしょう。

なおCsvHelperのバージョンが古い場合、ClassMapの前身であるCsvClassMapを使うことになるらしいです。
引用返信 編集キー/
■101347 / inTopicNo.5)  Re[4]: CsvHelper Index設定
□投稿者/ ゆき (7回)-(2023/02/07(Tue) 15:55:06)
No101344 (Hongliang さん) に返信
> .Index(x)に与えるxをSettingsから読み取った値にすればいいでしょう。
> 
> なおCsvHelperのバージョンが古い場合、ClassMapの前身であるCsvClassMapを使うことになるらしいです。

 ありがとうございます!
 CsvConfigurationにRegisterClassMap<>を書いていましたが、URLのように

             using (var csv = new CsvHelper.CsvReader(streamReader, csvConfig))
            {
                csv.Context.RegisterClassMap<CsvStructMapper>();

 と書いたら、Mappingを反映させることが出来ました!

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -