Windows 7 Enterprise で Visual Studio 2013、.NET 4.5.2、OpenXml 2.5 を使用しています。2 つの .csv ファイルを 1 組の汎用リストにインポートし、例外がないか比較するためのコード スニペットを作成しました。.csv ファイルをロードするジェネリック クラスを作成しようとしたときに、TextFieldParser が機能しませんでした。Main() 内では機能しますが、クラス内では機能しません。
答えは「名前空間内でエイリアスを使用する」ことに関係していると思われますが、Main() 内で完全に機能します。Microsoft は、rhs をジェネリック型にすることはできないという免責事項を持っていますが、ある場所で機能する場合、他の場所では機能しないのはなぜですか?
これは予期された動作ですか、それとも既知の回避策はありますか?
背景: TextFieldParser は、.csv または固定フィールド ファイルの解析を適切に処理する VB.NET クラスです。ジェネリック リスト (List) は、そこに置かれたすべてのものを処理できるリスト クラスです。私の場合、含まれるオブジェクトとしてレコード クラスを使用しています。OpenXml は、Office 製品と連携して XML 構成ファイルまたは接続文字列を処理するための Microsoft テクノロジです。使用するクラスをジェネリックにするために、構成設定をインポートします。私が問題を抱えている TextFieldParser の汎用クラスを構築しようとしています。Google は私をここまで導いてくれましたが、それ以上ではありません。
Main() の作業コード:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualBasic.FileIO;
using ExportToExcel;
public static void Main(string[] args)
{
// HARD_CODED FOR EXAMPLE ONLY - TO BE RETRIEVED FROM APP.CONFIG IN REAL PROGRAM
string hospPath = @"C:\\events\\inbound\\OBLEN_COB_Active_Inv_Advi_Daily_.csv";
string vendPath = @"C:\\events\\outbound\\Advi_OBlen_Active_Inv_Ack_Daily_.csv";
List<DenialRecord> hospList = new List<DenialRecord>();
List<DenialRecord> vendList = new List<DenialRecord>();
using (TextFieldParser hospParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(hospPath))
{
hospParser.TextFieldType = FieldType.Delimited;
hospParser.SetDelimiters(",");
hospParser.HasFieldsEnclosedInQuotes = false;
hospParser.TrimWhiteSpace = true;
while (!hospParser.EndOfData)
{
try
{
string[] row = hospParser.ReadFields();
if (row.Length <= 7)
{
DenialRecord dr = new DenialRecord(row[0], row[1], row[2], row[3], row[4], row[5], row[6]);
hospList.Add(dr);
}
}
catch (Exception e)
{
Console.WriteLine("Error is: {0}", e.ToString());
}
}
hospParser.Close();
hospParser.Dispose();
}
クラス自体の非動作コード:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualBasic.FileIO;
using ExportToExcel;
namespace InputSide
{
internal class CsvLoader
{
private int columnCount = 7; // backing store
private string filePath;
private List<DenialRecord> inputList = new List<DenialRecord>();
public List<DenialRecord> InputList
{
set
{
this.inputList = InputList;
}
get
{
return inputList;
}
}
// Default constructor
internal CsvLoader()
{
}
// Exposed constructor
public CsvLoader(List<DenialRecord> InputList, string FilePath, int ColumnCount)
{
this.inputList = InputList;
this.filePath = FilePath;
}
// Load csv to List<T>
public List<DenialRecord> CsvList(int columnCount)
{
private int columnCount;
using (TextFieldParser csvParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(filePath))
{
csvParser.TextFieldType = FieldType.Delimited;
csvParser.SetDelimiters(",");
csvParser.HasFieldsEnclosedInQuotes = false;
csvParser.TrimWhiteSpace = true;
while (!csvParser.EndOfData)
{
try
{
string[] row = csvParser.ReadFields();
if (row.Length <= 7)
{
DenialRecord dr = new DenialRecord(row[0], row[1], row[2], row[3], row[4], row[5], row[6]);
inputList.Add(dr);
}
}
catch (Exception e)
{
// do something
Console.WriteLine("Error is: {0}", e.ToString());
}
}
csvParser.Close();
csvParser.Dispose();
}
return inputList;
}
}
}
編集:
追加されたエラー リスト:
エラー 1 } 予想される c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 43 10 InputSide
エラー 2 無効なトークン 'using' クラス、構造体、またはインターフェイス メンバー宣言 c:\users\ jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 46 13 入力側
エラー 3 ; c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 46 77 InputSide
エラー 4 無効なトークン '=' クラス、構造体、またはインターフェイス メンバー宣言 c:\users\jas189\documents \visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 48 41 入力側
エラー 5 無効なトークン ';' クラス、構造体、またはインターフェイス メンバー宣言 c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 48 62 InputSide
エラー 6 無効なトークン '(' クラス、構造体、またはインターフェイス メンバー宣言c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 49 40 InputSide
エラー 7 無効なトークン '=' クラス、構造体、またはインターフェイス メンバー宣言 c:\users\jas189\documents\ Visual Studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 50 53 InputSide
Error 8 無効なトークン '=' クラス、構造体、またはインターフェイス メンバー宣言 c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide \CsvLoader.cs 51 42 入力側
エラー 9 クラス、構造体、またはインターフェイス メンバー宣言の無効なトークン ')' c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 53 44 InputSide
エラー 10 クラスの無効なトークン 'if' 、構造体、またはインターフェイス メンバー宣言 c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 59 25 InputSide
エラー 11 クラス、構造体、またはインターフェイス メンバー宣言 c の無効なトークン '<=' :\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 59 40 InputSide
エラー 12 無効なトークン '(' クラス、構造体、またはインターフェイス メンバー宣言 c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 62 42 入力側
エラー 13 クラス、構造体、またはインターフェイス メンバー宣言の無効なトークン ')' c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 62 45 InputSide
エラー 14 名前空間に次のようなメンバーを直接含めることはできませんフィールドまたはメソッドとして c:\users\jas189\documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 65 21 InputSide
Error 15 タイプまたは名前空間の定義、またはファイルの終わりが予想される c:\users\jas189\ documents\visual studio 2013\Projects\InputSide\InputSide\CsvLoader.cs 70 17 InputSide
Error 16 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.filePath' c:\users\jas189\documents を参照できません\visual studio 2013\projects\inputside\inputside\csvloader.cs 46 68 入力側
エラー 17 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.csvParser' を参照できません c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 58 40 InputSide エラー18 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' を参照できません c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 64 InputSide
エラー 19フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 72 InputSide を参照できません
エラー 20 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' を参照できません c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 80 InputSide
エラー21 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 88 InputSide
エラー 22を参照できませんフィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 96 InputSide を参照できません
エラー 23 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' を参照できません c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 104 InputSide
エラー24 フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'InputSide.CsvLoader.row' c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 61 112 InputSide
エラー 25を参照できません'InputSide.CsvLoader.CsvList(int)': すべてのコード パスが値を返すわけではありません c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 42 35 InputSide
エラー 26 'InputSide.CsvLoader.csvParser' は 'フィールド' ですが、'タイプ' のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 48 17 InputSide
Error 27 ' Microsoft.VisualBasic.FileIO.FieldType.Delimited は「フィールド」ですが、「タイプ」のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 48 53 InputSide エラー 28 「InputSide.CsvLoader.csvParser」は「フィールド」ですが、「タイプ」のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 49 17 InputSide
エラー 29 「InputSide. CsvLoader.csvParser は「フィールド」ですが、「タイプ」のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 50 17 入力側
エラー 30 'InputSide.CsvLoader.csvParser' は 'フィールド' ですが、'タイプ' のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 51 17 InputSide
Error 31 ' InputSide.CsvLoader.csvParser は「フィールド」ですが、「タイプ」のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 53 25 InputSide
Error 32 'InputSide.CsvLoader .row は「フィールド」ですが、「タイプ」のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 59 29 InputSide
Error 33 'InputSide.CsvLoader.inputList' 「フィールド」ですが、「タイプ」のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 62 29 入力側
エラー 34 'InputSide.CsvLoader.dr' は 'フィールド' ですが、'タイプ' のように使用されます c:\users\jas189\documents\visual studio 2013\projects\inputside\inputside\csvloader.cs 62 43 InputSide