gpt4 book ai didi

c# - 从只接受类类型的方法动态返回一个对象

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:37 27 4
gpt4 key购买 nike

我正在研究 .NET Framework 3.5我需要在 C# 中创建一个方法,它可以接受 5 种类型中的一种,并使用我传递给该方法的类类型动态生成对象。所以基本上这个方法有 2 个输入。一个是类的类型,另一个是我需要填充对象的数据对象。调用该方法后,它应该自动创建一个我发送的类类型的对象,并用我发送的数据对象填充字段。我尝试使用 System.reflection 的 createinstance,并获得了一个具有所需类的对象,但是,我感到震惊的是我必须用我拥有的数据对象填充字段。非常感谢任何帮助。

Edit : `public class DataInput
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
public string field4 { get; set; }
public DateTime field5 { get; set; }
public DateTime field6 { get; set; }


}
My 5 classes look like this :

public class Class1
{
public string field1;
public string field2;
public string field3;
public string field4;
public DateTime field5;
}

public class Class2
{
public string field1;
public string field2;
public string field3;

}

public class Class3
{
public int field1;
public string field2;
public string field3;

}

public class Class4
{
public int field1;
public string field2;
public string field3;
public DateTime field4;


}
public class Class5
{
public int field1;
public DateTime field2;
public string field3;

}

public void Convert(DataInput ratCommon, Type type1)
{
var type = Type.GetType(type1.AssemblyQualifiedName.ToString());
if (type != null)
{
Object obj = Activator.CreateInstance(type); //This creates an instance with type I passed, but I am struck here

}
}
I combined @Fabjan answer and @striplingwarrior answer and got the result. I can't thank you enough....

最佳答案

这看起来像是 AutoMapper 的一个很好的用例.

首先初始化类之间的映射。

Mapper.Initialize(cfg => {
cfg.CreateMap<DataInput, Class1>();
cfg.CreateMap<DataInput, Class2>();
// etc.
});

注意:您可能需要创建一些自定义映射 like projections ,因为看起来您的字段类型并不总是匹配。

然后您可以利用 Mapper.Map 方法:

public object Convert(DataInput ratCommon, Type type1) => Mapper.Map(foo, typeof(DataInput), type1);

或者,如果 type1 在编译时已知,您可以通过泛型获得类型安全:

public T Convert<T>(DataInput ratCommon) => Mapper.Map<T>(foo);

关于c# - 从只接受类类型的方法动态返回一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333484/

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