C# C“PropertyInfo GetValue()返回”;对象与目标类型“不匹配”;

C# C“PropertyInfo GetValue()返回”;对象与目标类型“不匹配”;,c#,generics,getvalue,C#,Generics,Getvalue,我有一个项目,它正在读取从SQLServer视图返回的行,我们将该视图称为“Foo”,并将这些行写入一系列文件。使用LINQ2SQL引用我的项目中的视图,来自Foo的结果称为“FooResults” 下面提供的方法接受要分析的对象类型、分隔符、写入文件的路径以及要分析的数据的通用列表。我已经指出了抛出异常的位置 public void WriteRecords<T>(T classType, string delimiter, string outputPath, List<T

我有一个项目,它正在读取从SQLServer视图返回的行,我们将该视图称为“Foo”,并将这些行写入一系列文件。使用LINQ2SQL引用我的项目中的视图,来自Foo的结果称为“FooResults”

下面提供的方法接受要分析的对象类型、分隔符、写入文件的路径以及要分析的数据的通用列表。我已经指出了抛出异常的位置

public void WriteRecords<T>(T classType, string delimiter, string outputPath, List<T> data)
{
    // Extract the property names and format as a delimited string
    var properties = classType.GetType().GetProperties().ToList();
    var headerLine = string.Join(delimiter, properties.Select(p => p.Name).ToArray());
    var formattedHeaderLine = new[] { headerLine };

    // Foreach line in the data provided, extract the values and format as delimited string
    foreach (var d in data)
    {
        try
        {
            foreach (var pinfo in d.GetType().GetProperties())
            {
                // This is the line causing the problems
                var value = pinfo.GetValue(pinfo, null);
            }
        }
        catch (Exception ex)
        {
            var message = ex.Message;
        }
    }
}
public void WriteRecords(T类类型、字符串分隔符、字符串输出路径、列表数据)
{
//将属性名称和格式提取为分隔字符串
var properties=classType.GetType().GetProperties().ToList();
var headerLine=string.Join(分隔符,properties.Select(p=>p.Name.ToArray());
var formattedHeaderLine=new[]{headerLine};
//对于提供的数据中的每一行,提取值并将其格式设置为分隔字符串
foreach(数据中的var d)
{
尝试
{
foreach(d.GetType().GetProperties()中的var pinfo)
{
//这是导致问题的线路
var value=pinfo.GetValue(pinfo,null);
}
}
捕获(例外情况除外)
{
var消息=ex.消息;
}
}
}
例外情况是:

对象与目标类型不匹配

应该是

var value = pinfo.GetValue(d, null);
您应该传递实例,而不是PropertInfo本身

应该是

var value = pinfo.GetValue(d, null);

您应该传递实例,而不是PropertInfo本身。

有趣的是,这正是消息所说的。目标类型不匹配。有趣的是,这正是消息所说的。目标类型不匹配。