我正在制作將表格匯出到 .csv 檔案的功能。
我有串列,其中 T 是自定義類。
我需要 .csv 檔案中列的 T 屬性名稱。
如何將它們提取到其他 List ?
uj5u.com熱心網友回復:
您可以使用反射:
var propertyNames = typeof(T).GetProperties()
.Select(p => p.Name));
uj5u.com熱心網友回復:
你的問題有點難以理解。但是我為您撰寫了一些示例代碼,希望它能回答您的問題。因為我相信您只需要問題的反思部分的幫助。
using System.Reflection;
namespace Example
{
public static class Program
{
public static void Main(string[] args)
{
var types = Assembly.GetExecutingAssembly().GetTypes();
foreach (var type in types)
{
var props = GetProperties(type);
foreach (var property in props)
{
Console.WriteLine($"Type: {type.FullName} -> Property: {property.Name}");
}
}
}
public static PropertyInfo[] GetProperties(Type T)
{
return T.GetProperties();
}
}
public class TestClass
{
public int Health { get; set; } // Example property
}
}
uj5u.com熱心網友回復:
我維護了一些使這變得非常容易的庫:Sylvan.Data.Csv 和 Sylvan.Data。
Sylvan.Data 庫提供了一個將 aIEnumerable<T>轉換為DbDataReader( AsDataReader) 的 API。Sylvan.Data.Csv 庫提供了用于寫入DbDataReaderCSV 檔案 ( CsvDataWriter) 的 API。你可以結合這些來做一個擴展方法:
using Sylvan.Data;
using Sylvan.Data.Csv;
static class CsvMethods
{
public static long WriteAsCsv<T>(this IEnumerable<T> seq, string file)
where T : class
{
using var writer = File.CreateText(file);
return WriteAsCsv(seq, writer);
}
public static long WriteAsCsv<T>(this IEnumerable<T> seq, TextWriter output)
where T : class
{
using var csvWriter = CsvDataWriter.Create(output);
return csvWriter.Write(seq.AsDataReader());
}
}
然后,您可以List<T>使用一行代碼將您的檔案寫入 CSV 檔案:
List<MyData> data = ...;
data.WriteAsCsv("mydata.csv");
實作這些庫的代碼非常高效,并且將處理 CSV 邊緣情況,例如包含分隔符、引號等的欄位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428820.html
上一篇:如何從兩個CSV檔案中獲取資料以在圖表上顯示一個以進行比較?
下一篇:在csv列上寫入并更改標題
