gpt4 book ai didi

c# - 尝试使用 SetValue 时对象与目标类型不匹配

转载 作者:太空狗 更新时间:2023-10-29 23:32:34 30 4
gpt4 key购买 nike

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);
}
}

}
}
}

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

最佳答案

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

if (data.UseServerValue)
currentProperty.SetValue(data.ClientBaseObject, data.ServerValue);
else
currentProperty.SetValue(data.ClientBaseObject, data.ClientValue);

该属性属于data.ClientBaseObject,所以它应该是调用目标。该属性没有索引器,所以 if you are on .NET 4.5 or later ,您可以完全跳过第三个参数。

关于c# - 尝试使用 SetValue 时对象与目标类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15232763/

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