如何在 C# 中从自定义 class 中提取 属性 名称
How to extract property names from custom class in C#
我正在制作将 table 导出到 .csv 文件的功能。
我有列表,其中 T 是自定义的 class。
我需要 属性 .csv 文件中列的 T 名称。
如何将它们提取到其他列表?
你可以使用反射:
var propertyNames = typeof(T).GetProperties()
.Select(p => p.Name));
你的问题有点难懂。
但是我为您写了一些示例代码,希望它能回答您的问题。
因为我相信你只是需要帮助解决问题的反思部分。
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
}
}
我维护了一些使这很容易的库:Sylvan.Data.Csv and Sylvan.Data。
Sylvan.Data 库提供了一个 API 用于将 IEnumerable<T>
转换为 DbDataReader
(AsDataReader
)。 Sylvan.Data.Csv 库提供 API 用于将 DbDataReader
写入 CSV 文件 (CsvDataWriter
)。您可以将这些结合起来制作扩展方法:
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 edge-cases,例如包含分隔符、引号等的字段。
我正在制作将 table 导出到 .csv 文件的功能。
我有列表,其中 T 是自定义的 class。
我需要 属性 .csv 文件中列的 T 名称。
如何将它们提取到其他列表?
你可以使用反射:
var propertyNames = typeof(T).GetProperties()
.Select(p => p.Name));
你的问题有点难懂。 但是我为您写了一些示例代码,希望它能回答您的问题。 因为我相信你只是需要帮助解决问题的反思部分。
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
}
}
我维护了一些使这很容易的库:Sylvan.Data.Csv and Sylvan.Data。
Sylvan.Data 库提供了一个 API 用于将 IEnumerable<T>
转换为 DbDataReader
(AsDataReader
)。 Sylvan.Data.Csv 库提供 API 用于将 DbDataReader
写入 CSV 文件 (CsvDataWriter
)。您可以将这些结合起来制作扩展方法:
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 edge-cases,例如包含分隔符、引号等的字段。