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