gpt4 book ai didi

c# - PropertieInfo 的 GetValue 抛出 TargetParameterCountException (System.Reflection)

转载 作者:太空狗 更新时间:2023-10-29 23:21:06 26 4
gpt4 key购买 nike

我错误地在 SharePoint 上发布了这个问题部分。

我需要将一个模型映射到另一个模型。一切正常,但最后一个属性抛出 TargetParameterCountException。抛出异常的属性称为“Item”,此属性不是我定义的,我假设这是字典中的属性。

我已经尝试使用所有五个参数而不是仅使用一个(如此处所述 Moq + Unit Testing - System.Reflection.TargetParameterCountException: Parameter count mismatch )但不幸的是我会遇到同样的异常。如果有人能帮助我,我将不胜感激。

亲切的问候和感谢

桑德罗

这是源模型的摘录,所有其他属性都以完全相同的方式实现:

public class DataModel : Dictionary<string, object> {}
public class DiscussionDataModel : DataModel
{
public DiscussionDataModel(Dictionary dictionary) : base(dictionary){}

public FieldUserValue Author
{
get { return (FieldUserValue) this["Author"]; }
set { this["Author"] = value; }
}

public double AverageRating
{
get { return (double) this["AverageRating"]; }
set { this["AverageRating"] = value; }
}
}

这是目标模型的摘录,所有其他属性都以完全相同的方式实现:

public class DiscussionModel : BaseModel
{
public FieldUserValue Author { get; set; }
public double AverageRating { get; set; }
}

这是将 DataModel 映射到 BaseModel 的通用扩展方法:

public static T ToModel(this DataModel dataModel) where T : BaseModel
{
try
{
T model = Activator.CreateInstance();
if (dataModel != null)
{
PropertyInfo[] propertyInfos = dataModel.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);

foreach (PropertyInfo propertyInfo in propertyInfos)
{
object value = propertyInfo.GetValue(dataModel);
if (value == null) { break; }
PropertyInfo modelPropertyInfo = model.GetType().GetProperty(propertyInfo.Name);
modelPropertyInfo?.SetValue(model, value);
}
return model;
}
}
catch (Exception ex)
{
throw;
}
return null;
}

最佳答案

问题是 Item 属性是索引的,即它有一个参数。 C# 通常不允许这样做,但其他 .NET 语言(如 VB.NET)允许这样做。因此,这个概念为 CLR 所知,因此也为 Reflection 所知。在 C# 中,只有一种方法可以创建索引属性,即通过索引器。这在 CLR 级别所做的是创建一个名为 Item 的索引属性,因此您可能刚刚偶然发现了一个索引器。

所以解决办法就是检查property info是否有参数,如果有则继续for循环。您没有机会大致了解要将哪些对象传递到索引属性中。

关于c# - PropertieInfo 的 GetValue 抛出 TargetParameterCountException (System.Reflection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857188/

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