私のcsvファイルは次のようになります。
1,couchName1,“green”,“suede”
2,couchName2,“blue”,“suede”
3,couchName3,fail,“sued”
...etc.
この csv を読み取り、各行をカウチ オブジェクト グラフに変換する必要があります。だからここに私が試したものがあります:
public static IEnumerable<string[]> ReadCsvFile(string filePath)
{
IEnumerable<string[]> file = File.ReadLines(filePath).Select(a => a.Split(';'));
return file;
}
public static List<Couch> GetCouches(string csvFilePath)
{
IEnumerable<string[]> fileRows = FileUtilities.ReadCsvFile(csvFilePath);
if (fileRows == null) return new List<Couch>();
int couchId;
List<Couch> couches = fileRows.Select(row => new Couch
{
CouchId = int.TryParse(row[0], out couchId) ? couchId : 0,
Name= row[1],
Color= row[2],
Fabric= row[3]
}).ToList();
return couches;
}
{"インデックスが配列の範囲外でした。"} というエラーが、LINQ select ステートメントの行に表示されます。ここで、それらを解析して Couch インスタンスと、それらを返したい汎用リストに変換しようとしています。
解決:
これが私がそれを機能させ、自分で解決した方法です:
public static List<Couch> GetCouches(string csvFilePath)
{
IEnumerable<string[]> fileRows = FileUtilities.ReadCsvFile(csvFilePath);
List<Couch> couches = new List<Couch>(); // ADDED THIS
if (fileRows == null) return new List<Couch>();
int couchId;
// NEW LOGIC, SPLIT OUT EACH ROW'S COLUMNS AND THEN MAKE THE OBJECT GRAPH
foreach(string[] row in fileRows)
{
string[] rowColumnValues = row[0].Split(',').ToArray();
couches.Add(new Couch
{
CouchId = int.TryParse(rowColumnValues[0], out couchId) ? couchId : 0,
Name= rowColumnValues[1],
Color= rowColumnValues[2],
Fabric= rowColumnValues[3]
}
return couches;
}