繁体   English   中英

从不同dll中的字符串值表示形式获取通用类型

Get generic type from string value representation in different dlls

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有3种类型都来自不同的dll y找不到如何在字符串中存储泛型类型以及如何创建实例:

Type type1 = GetType1();
Type type2 = GetType2();
string strClassGenericType = "Namespace.ClassName<,>, DllName";

Type template = // How to get the generic template type?

Type genericType = template.MakeGenericType(new[] { type1, type2 });
object instance = Activator.CreateInstance(genericType);

我不确定是否适合我的要求。

4 个回复

在特定的情况下,如果您想知道不知道其类型参数的对象的类型,则可以使用带有多个类型参数的反引号。 这是Tuple的示例:

Console.WriteLine(typeof (Tuple<,>).FullName); //For information only, outputs "System.Tuple`2"
var typeName = "System.Tuple`2";
var type = Type.GetType(typeName);
var generic = type.MakeGenericType(typeof (string), typeof (int));
Console.WriteLine(generic.FullName); //Outputs the type with the type parameters.

通用类型的正确字符串表示形式如下所示:

"System.Collections.Generic.Dictionary`2[[System.String],[System.Object]]"

其中'2表示泛型类型参数的数量。

有关完全限定的类型名称,请参见小提琴


如果您正在寻找没有指定泛型类型参数的泛型类型(所谓的开放泛型),那就是这样:

"System.Collections.Generic.Dictionary`2, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

vcsjonesabatishchev都有正确的答案,但是您会错过dll。

感谢vcsjones我使用了这个:

string strGenericType = "Namespace.ClassName`2, DllName";
Type template = Type.GetType(strGenericType);

Type genericType = template.MakeGenericType(new[] { type1, type2 });
object instance = Activator.CreateInstance(genericType);

感谢abatishchev,它更短:

string strGenericType = "Namespace.ClassName`2[[Namespace1.Type1, Type1DllName],[Namespace2.Type2, Type2DllName]], DllName";
Type genericType = Type.GetType(strGenericType);

object instance = Activator.CreateInstance(genericType);

我认为您正在尝试从字符串值创建类型。

尝试:

Type type = Type.GetType("System.String");

例如,从字符串创建文本框类型:

Type.GetType("System.Windows.Forms.TextBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

参见MSDN

5 在Swift 4中,如何获取存储在“ Any”类型变量中的数据类型的字符串表示形式?

如果将值存储在“任何”变量中,则获取该值的数据类型的字符串表示的最简单方法是什么? 例如,我正在调试具有此功能的代码... 我试图找出通过该函数传递的数据类型,但是如果我使用type(of :),我将不断获取“ Any”,而不是其中包含的值。 我只是想将数据类型打印到调试窗 ...

6 如果只有类型和值的字符串表示形式,如何实例化已经设置为特定值的类型的实例?

我有以下四个字符串; 两对,每对都有一个代表值及其数据类型的字符串。 我知道我可以像这样得到每个类型... ...我可以像这样激活上述类型的新实例... ...但是我不确定如何创建设置为以字符串表示形式stringValueOfA和stringValueOfB编码的值的 ...

7 Java中的字符串表示形式

字符串在Java中表示为对象。 因此,对象包含存储在对象内实例变量中的值。 对象还包含对对象进行操作的代码主体。 这些代码体称为方法 。 包含相同类型的值和相同方法的对象被分组为类。 可以将类视为这些对象的类型定义。 因此,如何用Java表示String? 让我们考虑以下Ja ...

2011-11-09 18:40:04 3 8590   java
9 给定表示类型的字符串,请在golang中获取其零值

我不太喜欢golang反射,并且遇到了一个解析问题,我尝试将代表值/结构的给定字符串解析为零值。 例如: 还有其他可能是interface / struct-&gt; interface {}或struct {}的东西吗?是否有通用的方法可以确定使用反射库? ...

2016-11-18 15:47:27 0 58   go
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM