Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试使用SetValue时,对象与目标类型不匹配 公共类冲突保护程序 { 私有只读IEnumerable\u冲突作业数据; 私有只读DataAccessDataContext\u dc; 公共冲突保护程序(IEnumerable conflictingJobData、DataAccessDataContext dc) { _conflictingJobData=conflictingJobData; _dc=dc; } 公共作废保存() { foreach(冲突作业数据中的var数据) { var type=data.ClientBaseObject.GetType(); var formattedProperty=data.Property.Trim('.').ToUpper(); foreach(类型.GetProperties()中的var属性) { var currentProperty=data.ClientBaseObject.GetType().GetProperties().First(t=>t.Name.Trim()==property.Name.Trim()); 如果(currentProperty.Name.ToUpper()==formattedProperty) { if(data.UseServerValue) currentProperty.SetValue(currentProperty,data.ServerValue,null); 其他的 currentProperty.SetValue(currentProperty,data.ClientValue,null); } } } } }_C#_.net_Reflection - Fatal编程技术网

C# 尝试使用SetValue时,对象与目标类型不匹配 公共类冲突保护程序 { 私有只读IEnumerable\u冲突作业数据; 私有只读DataAccessDataContext\u dc; 公共冲突保护程序(IEnumerable conflictingJobData、DataAccessDataContext dc) { _conflictingJobData=conflictingJobData; _dc=dc; } 公共作废保存() { foreach(冲突作业数据中的var数据) { var type=data.ClientBaseObject.GetType(); var formattedProperty=data.Property.Trim('.').ToUpper(); foreach(类型.GetProperties()中的var属性) { var currentProperty=data.ClientBaseObject.GetType().GetProperties().First(t=>t.Name.Trim()==property.Name.Trim()); 如果(currentProperty.Name.ToUpper()==formattedProperty) { if(data.UseServerValue) currentProperty.SetValue(currentProperty,data.ServerValue,null); 其他的 currentProperty.SetValue(currentProperty,data.ClientValue,null); } } } } }

C# 尝试使用SetValue时,对象与目标类型不匹配 公共类冲突保护程序 { 私有只读IEnumerable\u冲突作业数据; 私有只读DataAccessDataContext\u dc; 公共冲突保护程序(IEnumerable conflictingJobData、DataAccessDataContext dc) { _conflictingJobData=conflictingJobData; _dc=dc; } 公共作废保存() { foreach(冲突作业数据中的var数据) { var type=data.ClientBaseObject.GetType(); var formattedProperty=data.Property.Trim('.').ToUpper(); foreach(类型.GetProperties()中的var属性) { var currentProperty=data.ClientBaseObject.GetType().GetProperties().First(t=>t.Name.Trim()==property.Name.Trim()); 如果(currentProperty.Name.ToUpper()==formattedProperty) { if(data.UseServerValue) currentProperty.SetValue(currentProperty,data.ServerValue,null); 其他的 currentProperty.SetValue(currentProperty,data.ClientValue,null); } } } } },c#,.net,reflection,C#,.net,Reflection,尝试调用SetValue()时,我在Save()函数中得到的对象与目标类型不匹配。我讨厌反射。看起来您使用了错误的重载,并传递了错误的对象: public class ConflictSaver { private readonly IEnumerable<CommonJobDataInfo> _conflictingJobData; private readonly DataAccessDataContext _dc; public ConflictSav

尝试调用SetValue()时,我在Save()函数中得到的对象与目标类型不匹配。我讨厌反射。

看起来您使用了错误的重载,并传递了错误的对象:

public class ConflictSaver
{
    private readonly IEnumerable<CommonJobDataInfo> _conflictingJobData;
    private readonly DataAccessDataContext _dc;

    public ConflictSaver(IEnumerable<CommonJobDataInfo> conflictingJobData, DataAccessDataContext dc)
    {
        _conflictingJobData = conflictingJobData;
        _dc = dc;
    }

    public void Save()
    {
        foreach (var data in _conflictingJobData)
        {
            var type = data.ClientBaseObject.GetType();
            var formattedProperty = data.Property.Trim('.').ToUpper();
            foreach (var property in type.GetProperties())
            {
                var currentProperty = data.ClientBaseObject.GetType().GetProperties().First(t => t.Name.Trim() == property.Name.Trim());

                if(currentProperty.Name.ToUpper()== formattedProperty)
                {
                    if (data.UseServerValue)
                        currentProperty.SetValue(currentProperty, data.ServerValue, null);
                    else
                        currentProperty.SetValue(currentProperty, data.ClientValue, null);
                }
            }

        }
    }
}  

该属性属于
data.ClientBaseObject
,因此它应该是调用目标。该属性没有idexer,因此,您可以完全跳过第三个参数。

当我编译该属性时,它会显示“无重载,使用2个参数”。我将尝试使用null。@DJBurb啊,我没有意识到2-arg重载只适用于.NET4.5!
null
的重载应该可以工作。
if (data.UseServerValue)
    currentProperty.SetValue(data.ClientBaseObject, data.ServerValue);
else
    currentProperty.SetValue(data.ClientBaseObject, data.ClientValue);