C# 从通过反射而非反射创建的通用对象访问成员/函数?

C# 从通过反射而非反射创建的通用对象访问成员/函数?,c#,.net,vb.net,generics,reflection,C#,.net,Vb.net,Generics,Reflection,我有一个可用的a类型: Type arg1 = GetGenericType(3); // based on the number passed a type is received. 我想创建一个泛型类型的对象:MyGenericType,所以我这样做: Type g1 = typeof(MyGenericType<>); Type g2 = g1.MakeGenericType(arg1); 现在我将泛型类型的对象存储在“objG”中。接下来,我需要访问“objG”中的一些成

我有一个可用的a类型:

Type arg1 = GetGenericType(3); // based on the number passed a type is received.
我想创建一个泛型类型的对象:
MyGenericType
,所以我这样做:

Type g1 = typeof(MyGenericType<>);
Type g2 = g1.MakeGenericType(arg1);

现在我将泛型类型的对象存储在“objG”中。接下来,我需要访问“objG”中的一些成员。我可以用反射来做这件事。但是有没有简单的方法呢?是否将此对象存储在某个对象中,通过该对象我可以访问其成员或将“objG”类型转换为MyGenericType

是的,您可以利用以下简单示例:

dynamic listInt = Activator.CreateInstance(typeof (List<int>));
listInt.Add(3);

int count = listInt.Count;
dynamic listin=Activator.CreateInstance(typeof(List));
添加(3);
int count=listInt.count;

如果我使用的是VB.NET,且Strict选项处于启用状态,该怎么办?@Brij:为什么您的标记使用C#?我必须同时使用C#和VB,有没有办法在VB中执行此操作?(我已经编辑了标签以包括VB)@Brij:我不知道VB.NET,你可以问另一个问题VB.NET中没有严格On的等价物,因为VB.NET中没有动态关键字。这基本上就是Strict On的意思,因为您可以将某些代码标记为Strict Off,然后动态将成为Object。。。简单如更容易理解,更容易键入,更容易在PC的CPU上使用?易于理解和键入,这样我就不必走反射的路。您调用的方法可能有一个已知的签名,它不依赖于类型参数,否则您仍然需要知道调用它们的类型(因为您的代码中会有相应类型的参数)…因此,您可以在MyGenericType上声明一个不依赖于类型参数的接口并强制转换为该接口吗?
dynamic listInt = Activator.CreateInstance(typeof (List<int>));
listInt.Add(3);

int count = listInt.Count;