C# 在C中从字符串创建结构#

C# 在C中从字符串创建结构#,c#,reflection,dynamic,structure,C#,Reflection,Dynamic,Structure,我见过很多关于从字符串实例化类的问题,但是找不到任何关于以同样方式创建结构的信息 我有一个包含如下结构的类: Public Structure callDetails Public GUID As Guid Public ringTime as Date Public CBN As String 等等 我真正想做的就是从结构中获取字段名。我不想操纵字段中的数据 到目前为止,我可以非常接近这个 callDetails callTableDef= new c

我见过很多关于从字符串实例化类的问题,但是找不到任何关于以同样方式创建结构的信息

我有一个包含如下结构的类:

Public Structure callDetails
    Public GUID As Guid
    Public ringTime as Date
    Public CBN As String
等等

我真正想做的就是从结构中获取字段名。我不想操纵字段中的数据

到目前为止,我可以非常接近这个

        callDetails callTableDef= new callDetails();

        Type tableType = callTableDef.GetType();

        object tableStruct = (object)Activator.CreateInstance(tableType);
        System.Reflection.FieldInfo[] fields = tableType.GetFields();
        foreach (System.Reflection.FieldInfo field in fields)
        Debug.WriteLine(field.Name + " = " + field.GetValue(tableStruct));
但是,我仍然需要创建一个具有实际名称的结构实例。我希望能够传入如下字符串:

Type tableType = System.Type.GetType("callDetails");
当我这样做时,我从Activator.CreateInstance()获得ArgumentNullException

getType不应该查找作为字符串传递给它的值并返回类型吗


我是C语言的新手,在本项目之前,我主要使用Java编程。

您必须用名称空间限定类型名称:

Type tableType = System.Type.GetType("mynamespace.callDetails");

如果它位于不同的程序集中,则需要程序集限定名。详情请参阅。仅使用您拥有的类型名称,它将无法解析并返回
null
,因此您的参数为null异常。

如果结构或类是可访问的,这意味着您有一个对它的引用,最好使用
GetType
,因为这将采用结构/类而不是字符串。这意味着当出现错误时,它将在编译时失败,同时也为您提供了更好的重构可能性

Type tableType = GetType(callDetails)
在C#中:

谢谢大卫

MSDN参考正是我所需要的。我尽可能多地尝试确定它的资格。这个班在另一个集会上。我试过了

Type tableType = System.Type.GetType("CommonTables.callDetails");
毫无效果

对于其他查找此问题的人,以下是我必须做的:

在编写以下代码以进行调试之后:

Debug.WriteLine("DEBUG ASSEMBLY QUALIFIED NAME= " + callTableDef.GetType().AssemblyQualifiedName.ToString());
它给了我这个 作为程序集限定名

CommonTables.callDetails, callDetails, Version=3.0.4.0, Culture=neutral, PublicKeyToken=null
这就是我必须在getType()方法中使用的字符串。只是assembly.classname不起作用

CommonTables.callDetails, callDetails, Version=3.0.4.0, Culture=neutral, PublicKeyToken=null