gpt4 book ai didi

c# - 输入 'System.Reflection.TargetException'类型的异常

转载 作者:行者123 更新时间:2023-12-03 10:43:01 24 4
gpt4 key购买 nike

我对以下给出的异常有疑问:

System.Reflection.TargetException



因此,首先,我希望为数据库中的add方法开发一个通用方法,但是在这种情况下我遇到了问题,所以我的genericADD:
namespace MyProjectWPFMVVM.ViewsModels{
class PropertiesVMTypeItem : ViewModelBase
{
public int idTypeItem {
get { return idTypeItem; }
set
{
idTypeItem = 10;
OnPropertyChanged("idTypeItem");
}
}
public string DesignationTypeItem
{
get { return DesignationTypeItem; }
set
{
DesignationTypeItem = "sss";
OnPropertyChanged("DesignationTypeItem"); }
}
public int MaxNumberConnectionsTypeItem
{
get { return MaxNumberConnectionsTypeItem; }
set
{
MaxNumberConnectionsTypeItem=1;
OnPropertyChanged("MaxNumberConnectionsTypeItem"); }
}
}}
//and for my class model :
namespace MyProjectWPFMVVM.Models{
public partial class im_type_items
{
public im_type_items()
{
this.im_characteristics_items = new HashSet<im_characteristics_items>();
this.im_items = new HashSet<im_items>();
}

public int idTypeItem { get; set; }
public string DesignationTypeItem { get; set; }
public byte[] SymbolTypeItem { get; set; }
public int MaxNumberConnectionsTypeItem { get; set; }

public virtual ICollection<im_characteristics_items> im_characteristics_items { get; set; }
public virtual ICollection<im_items> im_items { get; set; }
}}//and this is my appel methode in VM :
public void GenericAjoutt(){
IList<PropertyInfo> propertiesForModel =
GenericAjout.GetPropertiesForModel<im_type_items>();
IList<PropertyInfo> propertiesForView = GenericAjout.GetPropertiesForView<PropertiesVMTypeItem>();
var newTypeItem = GenericAjout.CreateNewRowInModel<im_type_items>(propertiesForView, propertiesForModel);
ImItemsModel.SaveChanges();


}//and my problem is : namespace MyProjectWPFMVVM.Method
{public static class GenericAjout
{


private static Dictionary<Type, IList<PropertyInfo>> ModelDictionary = new Dictionary<Type, IList<PropertyInfo>>();
public static IList<PropertyInfo> GetPropertiesForModel<T>()
{
var type = typeof(T);
if (!ModelDictionary.ContainsKey(typeof(T)))
{
ModelDictionary.Add(type, type.GetProperties().ToList());
}
return ModelDictionary[type];
}
private static Dictionary<Type, IList<PropertyInfo>> ViewPropertiesDictionary = new Dictionary<Type, IList<PropertyInfo>>();
public static IList<PropertyInfo> GetPropertiesForView<T>()
{
var type = typeof(T);
if (!ViewPropertiesDictionary.ContainsKey(typeof(T)))
{
ViewPropertiesDictionary.Add(type, type.GetProperties().ToList());
}
return ViewPropertiesDictionary[type];
}
public static T CreateNewRowInModel<T>(IList<PropertyInfo> propertiesView, IList<PropertyInfo> propertiesModel ) where T : new()
{
T item = new T();
foreach (var p in propertiesView)
{
foreach (var property in propertiesModel)
{
property.SetValue(item, p.GetValue(property.Name)); // erreur L’objet ne correspond pas au type cible, ou une propriété est une propriété d’instance mais obj a la valeur null.
}
}
return item;
}

}

}

所以请帮忙
我编辑问题
所以是property.SetValue(item,p.GetValue(property.Name));//erreur L'objet ne对应于pas au类型的《圣经》,在任何情况下都应具有适当的所有权,如果没有,则为null。

最佳答案

您的问题有点难以理解,但是如果我理解正确的话,可以归结为:

foreach (var p in propertiesView)
{
foreach (var property in propertiesModel)
{
property.SetValue(item, p.GetValue(property.Name)); // erreur L’objet ne correspond pas au type cible, ou une propriété est une propriété d’instance mais obj a la valeur null.
}
}

也就是说,当您调用 property.GetValue()时,会收到一个异常报告,报告您传入的对象的类型与您要设置的属性的类型不正确。

对于给定的代码,这似乎是合理的,它似乎传递了 string值,就好像它是存在该属性的对象一样。即使这是固定的,您还有另一个问题,那就是对于 propertiesView列表中的每个属性,代码尝试使用该属性的值并设置 propertiesModel列表中的每个属性。例如。通过将目标对象的每个属性设置为该值,它尝试使用从源对象的 idTypeItem属性检索的值。

在我看来,相反,您应该传递要从中复制属性的对象,并且仅在名称相同的情况下才希望设置属性。例如:
public static T CreateNewRowInModel<T>(
IList<PropertyInfo> propertiesView, IList<PropertyInfo> propertiesModel, object source)
where T : new()
{
T item = new T();

foreach (var p in propertiesView)
{
object value = p.GetValue(source);

foreach (var property in propertiesModel)
{
// Optional, not shown:
// For added security, check that the types are the same also

if (property.Name == p.Name)
{
property.SetValue(item, value);
break;
}
}
}

return item;
}

我没有在您的代码中看到 source参数值的来源,但是大概您确实有一个可以传递给该方法的 View 对象。否则,您认为这些值(value)将来自何处?

关于c# - 输入 'System.Reflection.TargetException'类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45894902/

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