gpt4 book ai didi

c# - 动态创建 C# 类或对象

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

我有这个结构。

public class FirstClass
{
public List<Foo> FooList{ get; set; }
}

public class Foo{
//Ex:
//public string Name{ get; set; }
}

public List<Foo> GetFoo(){
//I'm use Firstclass like this here typeof(FirstClass);
//I want create here dynamic property for Foo class.
}

我的问题是,我想从“GetFoo()”函数为“Foo”类创建属性。同时,这个函数返回“List”“Foo”类型。我在研究"Dynamically Add C# Properties at Runtime" , "How to dynamically create a class in C#?"但是这些链接中的答案未被引用为返回值或被引用到另一个类。我该怎么做?

最佳答案

可以动态创建类,继承Foo ,具有任何其他属性。因此,您可以将这些动态类的实例添加到 List<Foo> 中.

为此,可以生成如下代码字符串:

var bar1Code = @"
public class Bar1 : Foo
{
public Bar1(int value)
{
NewProperty = value;
}
public int NewProperty {get; set; }
}
";

然后使用 CSharpCodeProvider 编译它:

var compilerResults = new CSharpCodeProvider()
.CompileAssemblyFromSource(
new CompilerParameters
{
GenerateInMemory = true,
ReferencedAssemblies =
{
"System.dll",
Assembly.GetExecutingAssembly().Location
}
},
bar1Code);

然后可以创建一个 Bar1 的实例,将其添加到 List<Foo>并且,例如将其转换为 dynamic 以访问动态属性:

var bar1Type = compilerResults.CompiledAssembly.GetType("Bar1");
var bar2Type = compilerResults.CompiledAssembly.GetType("Bar2"); // By analogy

var firstClass = new FirstClass
{
FooList = new List<Foo>
{
(Foo)Activator.CreateInstance(bar1Type, 56),
(Foo)Activator.CreateInstance(bar2Type, ...)
}
};

var dynamicFoo = (dynamic)firstClass.FooList[0];
int i = dynamicFoo.NewProperty; // should be 56

关于c# - 动态创建 C# 类或对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47767871/

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