gpt4 book ai didi

c# - 调用泛型类的方法

转载 作者:可可西里 更新时间:2023-11-01 08:41:00 26 4
gpt4 key购买 nike

这是上下文:

我尝试编写一个映射器以将我的 DomainModel 对象动态转换为 ViewModel 对象。我遇到的问题是,当我尝试通过反射调用泛型类的方法时出现此错误:

System.InvalidOperationException:无法对 ContainsGenericParameters 为真的类型或方法执行后期绑定(bind)操作。

谁能帮我找出问题出在哪里?不胜感激

这是代码(我试图简化它):

public class MapClass<SourceType, DestinationType>
{

public string Test()
{
return test
}

public void MapClassReflection(SourceType source, ref DestinationType destination)
{
Type sourceType = source.GetType();
Type destinationType = destination.GetType();

foreach (PropertyInfo sourceProperty in sourceType.GetProperties())
{
string destinationPropertyName = LookupForPropertyInDestinationType(sourceProperty.Name, destinationType);

if (destinationPropertyName != null)
{
PropertyInfo destinationProperty = destinationType.GetProperty(destinationPropertyName);
if (destinationProperty.PropertyType == sourceProperty.PropertyType)
{
destinationProperty.SetValue(destination, sourceProperty.GetValue(source, null), null);
}
else
{

Type d1 = typeof(MapClass<,>);
Type[] typeArgs = { destinationProperty.GetType(), sourceType.GetType() };
Type constructed = d1.MakeGenericType(typeArgs);

object o = Activator.CreateInstance(constructed, null);

MethodInfo theMethod = d1.GetMethod("Test");

string toto = (string)theMethod.Invoke(o,null);

}
}
}
}


private string LookupForPropertyInDestinationType(string sourcePropertyName, Type destinationType)
{
foreach (PropertyInfo property in destinationType.GetProperties())
{
if (property.Name == sourcePropertyName)
{
return sourcePropertyName;
}
}
return null;
}
}

最佳答案

您需要在构造类型 constructed 上调用 GetMethod不是在类型定义 d1 上。

// ...

Type d1 = typeof(MapClass<,>);
Type[] typeArgs = { destinationProperty.GetType(), sourceType.GetType() };
Type constructed = d1.MakeGenericType(typeArgs);

object o = Activator.CreateInstance(constructed, null);

MethodInfo theMethod = constructed.GetMethod("Test");

string toto = (string)theMethod.Invoke(o, null);

// ...

关于c# - 调用泛型类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843042/

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