c# 在运行时创建未知的泛型类型

2023-12-14

因此,我有一个泛型类,它可能需要在其自己的方法内使用不同类型的泛型创建自身的实例,其类型是通过反射获得的。

这很重要,因为这个存储库映射T到数据库表 [这是我正在写的 ORMish] 并且如果代表的类T有一个代表另一个表的集合,我需要能够实例化它并将其传递到存储库 [ala Inception]。
我提供该方法是为了更容易发现问题。

private PropertiesAttributesAndRelatedClasses GetPropertyAndAttributesCollection() 
{
  // Returns a List of PropertyAndAttributes

  var type = typeof(T);
  //For type T return an array of PropertyInfo

  PropertiesAttributesAndRelatedClasses PAA = new PropertiesAttributesAndRelatedClasses();
  //Get our container ready

  //Let's loop through all the properties.
  PropertyAndAttributes _paa;
  foreach(PropertyInfo Property in type.GetProperties())
  {
    //Create a new instance each time.
    _paa = new PropertyAndAttributes();

    //Adds the property and generates an internal collection of attributes for it too
    _paa.AddProperty(Property);

    bool MapPropertyAndAttribute = true;
    //This is a class we need to map to another table
    if (Property.PropertyType.Namespace == "System.Collections.Generic")
    {
      PAA.AddRelatedClass(Property);
      //var x = Activator.CreateInstance("GenericRepository", Property.GetType().ToString());
    }
    else 
    {
      foreach(var attr in _paa.Attrs) 
      {
        if (attr is IgnoreProperty)
        {
          //If we find this attribute it is an override and we ignore this property.
          MapPropertyAndAttribute = false;
          break;
        }
      }
    }
    //Add this to the list.
    if (MapPropertyAndAttribute) PAA.AddPaa(_paa);
  }
  return PAA;
}

所以给出GenericRepository<T>,我想做一个GenericRepository<string type obtained via reflection from the Property>我该怎么做? 我需要用有效的东西替换的行是:

//var x = Activator.CreateInstance("GenericRepository", Property.GetType().ToString());

Thanks.


我想你正在寻找MakeGenericType method:

// Assuming that Property.PropertyType is something like List<T>
Type elementType = Property.PropertyType.GetGenericArguments()[0];
Type repositoryType = typeof(GenericRepository<>).MakeGenericType(elementType);
var repository = Activator.CreateInstance(repositoryType);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# 在运行时创建未知的泛型类型 的相关文章

随机推荐

  • 从非 UI 线程更新 ObservableCollection

    我正在开发 Windows 8 应用商店应用程序 我有一个计时器 每两分钟调用一次委托并发出异步网络请求 生成的数据将添加到绑定到 UI 元素的 observablecollection 中 这样做会引发异常 因为正在非 UI 线程上修改
  • Flexbox、CSSGrid 的奇怪行为

    我有这样的情况 https jsfiddle net johnsam rdtva2fq On Chrome效果很好 请看这个 它开始 参见 FIRST 和 LAST btn 好的 On Safari它没有 对于 iPad iPhone 也是
  • 如何检查 Java 8 Stream 是否为空?

    我如何检查是否Stream为空 如果不是 作为非终端操作抛出异常 基本上 我正在寻找与下面的代码等效的内容 但没有具体化中间的流 特别是 在终端操作实际消耗流之前不应进行检查 public Stream
  • 将特定的类/ID 应用到菜单上的当前页面 (PHP)

    我有一个这样的菜单 div a href http domain com folder biography img src blahblahblahblah a a href http domain com folder contacts
  • 向 QML 项目添加资源会导致编译速度非常慢

    我在项目的资源文件中添加了一些图标 突然间 QML 代码的每一个微小更改都会导致项目运行前需要 7 8 秒的等待时间 几乎感觉像是在重新编译 C 代码 但实际上这是 qrc 文件 编译 造成的延迟 我尝试禁用 qrc 压缩 希望它会变得更快
  • 为什么我的图像没有被附加到数组中?

    我有一个简单的模型 其中包括 var photos UIImage 我已将 zombies jpg 文件作为文件复制到项目中 然后 在表视图控制器中所需的 init 中 我想加载一条虚拟记录 我可以定义所有 String 和 NSDate
  • 多处理池和生成器

    首先看下面的代码 pool multiprocessing Pool processes N batch for item in generator batch append item if len batch 10 pool apply
  • 用于 SEO 的“h1”中的“p”标签[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 会使用 p 嵌套在 a 中的标签 p h1 标签对 SEO 不利吗 h1 p Some title p p Some subtitle p h1 这将使我的生活变得更轻松 处理动态页
  • 如何在 React Native 中运行后台任务?

    我已经建立了一个iOS 小应用程序在 React Native 中进行位置跟踪 定期将纬度 经度发送到用户选择的服务器 然而 这仅在应用程序位于前台时才有效 当用户在其他应用程序中时 如何在后台运行此任务 不幸的是 目前不支持任何类型的后台
  • 日期与日期时间

    我正在开发一个需要返回事件日期的程序 我正在寻找一个Date not a DateTime 是否有一种只返回日期的数据类型 不 没有 DateTime表示由日期和时间组成的某个时间点 但是 您可以通过以下方式检索日期部分Date财产 这是另
  • 如何将多种类型的用户重定向到各自的 Activity?

    我正在 Firebase 上创建一个投票应用程序 我有 3 种类型的用户 到目前为止 我可以在两种用户 学生 教师 使用以下代码登录后成功将他们重定向到各自的活动 到目前为止我的用户但现在我必须添加另一个用户 ADMIN 并且像其他用户一样
  • NHibernate 加载实体以及子集合的一部分

    有没有办法通过子集合上的子句来加载 NHibernate 实体 我有一个场景 我在 操作 中记录更改 即一个操作可以包含对多个实体的更改 当我想要加载特定实体的日志时 我会加载对该实体所做的任何更改的所有操作 加载这些操作会导致加载所有更改
  • Scala 这种别名和自我类型

    之间有什么关系吗this aliasing and self type Is this aliasing的一个特例self type 在scala 2nd P776编程中 作者说 抽象类 Parser T 扩展 p gt 你在第 29 4
  • PHP 闭包对象是否符合垃圾回收条件

    我想知道是否有人知道 PHP 的匿名函数是否符合垃圾回收条件 我知道用创建的函数create function没有被垃圾收集 但我找不到任何关于使用创建的内容的参考function 语法 内部表示为 Closure 对象 PHP 垃圾收集器
  • Android Studio:使用 Mac (OSX) 和 Windows 的同一项目的 SDK 位置发生变化

    我正在开发一个 Android Studio 项目 我的团队成员使用 Windows 我使用 OSX 问题是 当我从 git 提取新代码然后打开项目时 我会根据 Mac 的 SDK 位置得到各种更改 First a notice when
  • Android NDK 和更新的 API 支持

    我正在开发一个大量使用 NDK 的 Android 应用程序 在 Java 方面 我们的目标是 SDK 19 最小 SDK 为 16 有没有办法在 NDK 方面做类似的事情 现在我们的Application mk文件有APP PLATFOR
  • Android 如何将标题布局重用为 ListView 中的空视图

    在我的项目的整个生命周期中 我一直在努力解决这个问题 我的项目中有很多列表 其中大多数都有标题 我一直在制作一个单独的布局文件并使用 addHeaderView 将其添加到列表中 问题是当数据 ArrayList 在我的例子中 为空时 标题
  • Java 有没有办法将整数转换为其序数名称?

    我想取一个整数并得到它的序数 即 1 gt First 2 gt Second 3 gt Third 如果你同意1st 2nd 3rd等等 这里有一些简单的代码可以正确处理任何整数 public static String ordinal
  • Msbuild 和 SVN 更新

    我想编写一个简单的任务 它将更新并将夜间构建的源代码提交到 SVN 我在 msbuildtasks tigris org 页面上 下载了 dll 但我不知道如何编写它 您能提供一些基本样本吗 下面是一个示例 取自 MSBuild 社区任务构
  • c# 在运行时创建未知的泛型类型

    因此 我有一个泛型类 它可能需要在其自己的方法内使用不同类型的泛型创建自身的实例 其类型是通过反射获得的 这很重要 因为这个存储库映射T到数据库表 这是我正在写的 ORMish 并且如果代表的类T有一个代表另一个表的集合 我需要能够实例化它