【发布时间】:2013-08-08 21:08:51
【问题描述】:
我有一个泛型类,其中我有一个函数来获取传递的泛型对象的属性。如下所示。
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
所以,请解决任何问题............
【问题讨论】:
-
你的“下面的代码”没有多大意义,这使得评论有点困难 - 而你的“匿名对象”...... 不是匿名的 :它是
CsvReport。你能澄清一下吗?理想情况下显示您实际调用ExportToCsv的代码?另外:this.Data是如何声明的? -
请提供更小的例子,这样更容易专注于问题
-
你是如何实例化你的
ExportToCsv<CsvReport>的? -
您发布的代码是实际使用的吗?我可以想象你有类似
IEnumerable<T>的ExportToCsv构造函数,而不是List<T>,然后用基类而不是具体的派生类型实例化它。例如:new ExportToCsv<object>(myCollectionOfCsvReports)。这将导致它在基本类型T上查找属性(在这种情况下object不会产生任何可用的东西),其中访问第一项并在其上调用GetType()会给你@987654339 @type 这会产生你的属性。
标签: c# generics reflection