gpt4 book ai didi

c# - 动态方法创建

转载 作者:行者123 更新时间:2023-11-30 14:19:25 26 4
gpt4 key购买 nike

所以,我整个上午都在努力研究这个问题,但没有成功。我正在尝试找到一种方法来动态创建一个方法/委托(delegate)/lambda,该方法/委托(delegate)/lambda 返回从某个基类继承的某个类(直到运行时才知道)的新实例。

我可以保证以下关于未知/动态类的内容

  1. 它总是继承自一个已知的类(行)
  2. 它将至少有 2 个构造函数(一个接受 long,一个接受 IDataRecord)

我计划进行以下操作:

  1. 找到所有具有特定属性的类
  2. 创建一个委托(delegate)/方法/lambda/任何创建类的新实例的东西
  3. 将委托(delegate)/任何东西连同一些属性一起存储在结构/类中
  4. 将结构插入哈希表
  5. 在需要时,将信息从哈希表中提取出来并调用委托(delegate)/其他任何方法来获取该类的新实例并将其返回/将其添加到列表/等等。

我只需要上面#2 的帮助!!!我不知道从哪里开始。我真的只需要一些引用资料来帮助我入门,或者需要一些关键字来搜索谷歌。

这是为我们这里的办公室设计的紧凑/简单易用的 ORM。我明白上面的内容并不简单,但一旦开始工作,应该会使维护代码变得异常简单。

如果您需要更多信息,请告诉我!并提前致谢! :)

最佳答案

您可以使用 LINQ 表达式 在运行时构造 lambda (long p) => new XXX(p) as Row:

Type type = // ...
ConstructorInfo ctor = type.GetConstructor(new Type[] { typeof(long) });

var p = Expression.Parameter(typeof(long), "p");
var expr = Expression.Lambda<Func<long, Row>>(
Expression.TypeAs(
Expression.New(ctor, p),
typeof(Row)),
p);

Func<long, Row> rowCreator = expr.Compile();

Row row = rowCreator(10);

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

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