gpt4 book ai didi

c# - 使用泛型对象的反射获取属性

转载 作者:可可西里 更新时间:2023-11-01 03:06:13 25 4
gpt4 key购买 nike

我有一个通用类,其中我有一个函数来获取传递的通用对象的属性。如下所示。

public class ExportToCsv<T>        
where T: class
{
public ExportToCsv(List<T> obj)
{
this.Data = obj;
}

public StringBuilder CreateRows()
{
IEnumerable<PropertyInfo> properties = typeof(T).GetProperties();
}
}

如果我通过从如下对象(类)中选择来传递对象,它工作正常并返回我的属性

//GetLeadingRoutingRecords returns a class/object
var result = from obj in GetLeadRoutingRecords()
select new
{
LeadRoutingId = obj.LeadRoutingID,
Make = obj.Make
};

并将该结果作为 result.ToList();

传递

但是当我尝试通过为下面的属性创建一个类来创建我自己的匿名对象时,它不起作用不返回任何属性

注意:下面的代码是在一个循环中调用的,它运行良好,传递给上面的函数可以通过调试看到所有的值。

public CsvReport function return(){
return new CsvReport
{
ShopName = this.val,
TargetVehicleName = val
}.ToList();
}

我为上述匿名对象编写的类如下所示:

public class CsvReport
{
public string ShopName { get; set; }
public string TargetVehicleName { get; set; }
}

所以在这种情况下它不起作用,我正在选择第一条记录并获得如下所示的属性

this.Data.First().GetType().GetProperties();

我什至想在这里使用第一个模式,即 type(T).GetProperties

所以,请解决任何问题......................................

最佳答案

typeof(T) 的反射(reflection)工作正常;这是一个更简单的示例基于您的示例,但(重要的是)可运行。它输出:

ShopName
TargetVehicleName

代码:

using System;
using System.Collections.Generic;
public class CsvReport
{
public string ShopName { get; set; }
public string TargetVehicleName { get; set; }
}
class ExportToCsv<T>
{
List<T> data;
public ExportToCsv(List<T> obj)
{
data = obj;
}
public void WritePropNames()
{
foreach (var prop in typeof(T).GetProperties())
{
Console.WriteLine(prop.Name);
}
}

}
static class Program
{
static void Main()
{
var obj = new List<CsvReport>();
obj.Add(new CsvReport { ShopName = "Foo", TargetVehicleName = "Bar" });
new ExportToCsv<CsvReport>(obj).WritePropNames();
}
}

关于c# - 使用泛型对象的反射获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com