gpt4 book ai didi

c# - C# 中的动态构造函数

转载 作者:行者123 更新时间:2023-11-30 20:25:47 24 4
gpt4 key购买 nike

我正在尝试编写一个方法 GetDynamicConstructor<T>本质上,这将返回给定类的智能构造函数。它将接受一个字符串数组作为参数并将它们解析为适当的类型(给定现有的构造函数数据)。

public void Init()
{
DynamicConstructor<MyClass> ctor = GetDynamicConstructor<MyClass>();
MyClass instance = ctor(new string[] { "123", "abc" }); // parse "123" as int
}

public delegate T DynamicConstructor<T>(string[] args);

public DynamicConstructor<T> GetDynamicConstructor<T>()
{
ConstructorInfo originalCtor = typeof(T).GetConstructors().First();

ParameterInfo[] paramsInfo = originalCtor.GetParameters();

for (int i = 0; i < paramsInfo.Length; i++) {
Type paramType = paramsInfo[i].ParameterType;

// This is as far as I got :D
}

return null;
}

public class MyClass
{
int n;
string s;

public MyClass(int n, string s)
{
this.n = n;
this.s = s;
}
}

基本上,我想要的是从 MyClass 构建一个看起来像这样的方法。

public MyClass Example(string[] args)
{
return new MyClass(int.Parse(args[0]), args[1]);
}

这里只有基本类型,所以我可以指望 Parse存在我可能遇到的类型。

我怎样才能写出 GetDynamicConstructor<T> 的正文? ?

最佳答案

此方法已存在于 System.Activator 类中:

public static object CreateInstance (Type type, params object[] args);

当然必须存在对应实参数据的构造函数重载。您可以使用 Convert.ChangeType Method (Object, Type)更改参数的类型。

参见:CreateInstance(Type, Object[])在 learn.microsoft.com 上。

Activator.CreateInstance 有 16 种不同的重载。

关于c# - C# 中的动态构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50900034/

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