- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想将在运行时生成的类型(通过 TypeBuilder)传递给泛型类中的泛型方法。我不能将它作为对象传递,因为反射用于查找各种属性。
据我所知,这无法完成,因为泛型是在编译时而不是运行时应用的。
我知道我可以改变这样的方法
public T Read()
{
T data = new T()
...
return data;
}
成为某种东西
public object Read(Type newType)
{
object data = Activator.CreateInstance(newType);
...
return data;
}
但是当类型已知时,这显然失去了泛型的所有优势,所以我可能会以这两种方法结束,不幸的是,这也意味着复制相当多的其他辅助函数。
有没有更好的方法来解决这个问题?
这个特定的项目需要在 3.5 框架下工作,但如果在 3.5 下不可能,但在 4.0 下,我不介意知道。
最佳答案
假设Read()
是 class Reader<T> where T : new()
的成员,您可以像这样调用通用版本(如果您在该类型上有多个名为 GetMethod()
的方法,则可能使用 Read
的另一个重载):
Type readerType = typeof(Reader<>).MakeGenericType(generatedType);
object result = readerType
.GetMethod("Read")
.Invoke(Activator.CreateInstance(readerType), new object[0]);
这样,您就可以利用内部的泛型 Read()
,但不在外面。根据你想做什么,也许使用接口(interface)而不是泛型会更好。 new()
可以通过为每个生成的类型生成一个工厂类型来模拟约束,这些类型实现以下(非生成的)接口(interface):
interface IWhatever { … }
interface IWhateverFactory
{
IWhatever Create();
}
关于c# - 将在运行时生成的类型(通过 TypeBuilder)传递给 GenericClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5522954/
是否可以仅在点击 anchor 时为其分配 url? Token Link 当点击 anchor 时,它将转到 http://example.com/token=xxxxx/ 我只想在单击时生成 to
我不能 100% 确定我的错误。当我尝试生成 PDF 时,我得到了此编码输出: %PDF-1.4 %���� 3 0 obj <> /Contents 4 0 R>> endobj 4 0 obj <
下面的代码有几个函数,这些函数允许诸如将数据写入文档、读取文档以及将数据放入数组中以用于稍后的 JTable 等操作。 package tabletest.populatetable; import
我检查了我的网站 (WordPress) 应用程序的页面源并发现了以下内容 <iframe src="https://www.google.com/recaptcha
我有一个最终会生成 OutOfMemory 的程序。程序代码为: public class VeryLargeObject implements Serializable { public s
所以我正在构建一个博客引擎,它具有/articles/then-the-article-permalink 作为 URL 结构。我需要有 prev 和 next 链接,它们将通过 pub_date 跳
我有这个列表: string[] countries = { "USA", "CANADA" }; 当我运行这个查询时: query = (from user
我有一个将 InputStream 作为 InputStreamResource 返回的方法,当我让 swagger 生成文档时,它说返回类型是 InputStreamResource。如何更改此设置
令人惊讶的是,我找不到关于这个主题的任何内容。当在 EditText 中检测到“@”时,动态生成 ListView 的方法是什么。这是一个例子: 这是我目前所拥有的: textfield.setOn
我发现 Menhir 提供了 --dump 和 --explain 选项,它对调试有很大帮助。但是如何在 ocamlbuild 下启用这些选项,以便 Menhir 在编译时始终生成转储文件? 我尝试编
您好,我正在寻找使用 ajax 提交表单时在 codeigniter 中重新生成 csrf token 的过程。我希望在不刷新页面的情况下重新生成 token 。有没有办法做到这一点。 最佳答案 根据
int main(void) { float a; scanf("%f", &a); double c = sqrt(a); printf("%f", c);
我有看起来像这样的 Hibernate 实体(省略了 getter 和 setter): @Entity public class EntityA { @ManyToOne(fetch = F
我正在使用 git 来跟踪 wireshark project .我想提交一个补丁,但是所需的格式是以下输出(参见 http://www.wireshark.org/develop.html ): s
Spring 最近发布的关于在 Spring Boot 项目中使用静态 Web 内容的博文 (https://spring.io/blog/2013/12/19/serving-static-web-
我正在尝试设置我的测试环境,其中包括 React 测试库、Redux 工具包、RTK 查询和 TypeScript,但我遇到了一个我无法解决的问题。 我想不通的主要问题是如何生成 AppDispatc
我正在尝试将使用 Microsoft Access 数据库的网站移植到 MySQL。首先,我尝试打开 SQL 数据库: (旧)访问代码是: Set cn = Server.CreateObject (
我正在运行一个基本上从 Twitter 中提取推文的 Flask 应用程序。虽然使用嵌入式 Flask 服务器运行应用程序没有问题,但在 gUnicorn 中运行时我收到重复的推文,主要是因为我有 2
我正在学习 Python-这给了我一个 IO 错误- f = open('money.txt') while True: currentmoney = float(f.readline())
我想生成 N 个随机点,其乘积为某个值 1。 我在 MATALB 中是这样做的: N_=10; x1_=rand(1, N_); p_=prod(x1_); x_=x1_; x_(end)=x1_(e
我是一名优秀的程序员,十分优秀!