C#中使用反射获取结构体实例

简介: 原文:C#中使用反射获取结构体实例一般用反射获取类对象的实例比较简单,只要类有一个无参构造函数或没有显示声明带参的构造函数即可使用如下代码 static void Main(string[] args) { Type type = typeof(MyObject); object obj = type.
原文: C#中使用反射获取结构体实例

一般用反射获取类对象的实例比较简单,只要类有一个无参构造函数没有显示声明带参的构造函数即可使用如下代码

static void Main(string[] args)
{
    Type type = typeof(MyObject);
    object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null);
    Console.WriteLine(obj);
}

class MyObject
{

}

之前我一直没有发现原来结构是不可以这样实例化的

换种方式,似乎结构体使用反射无法得到其构造函数ConstructorInfo对象

类中有一个隐式的构造函数,而结构没有构造函数

我甚至尝试查找非public构造函数

依然没有

这问题一度困扰我很久....解决的方法并不难,所以也没当回事,但今天有个朋友又问到了这个问题,所以总结一下发出来,给同样遇到这个问题的朋友

其实非常简单,只要这样就可以了

static void Main(string[] args)
{
    Type type = typeof(MyStruct);
    object obj1 = type.Assembly.CreateInstance(type.FullName);
}

struct MyStruct
{

}

这个方法说明

Assembly.CreateInstance

使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。

使用这个方法就不用管class还是struct 都是可以用的,如果是class只要保证有无参构造函数就可以

 

这个方法不是什么高深的玩意儿,主要是给同样碰到这个问题的同学说明一下

======================================================

感谢 KarasCanvas同学,原来C#还有Activator这么一个类

 

Activator.CreateInstance(Type)

 

这样就可以了

 

 

 

 

目录
相关文章
|
存储 C#
C#数据类型之结构体介绍
C#数据类型之结构体介绍
371 1
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
844 0
|
缓存 C#
C# 操作路径(Path)类方法的使用与解析运行实例
C# 操作路径(Path)类方法的使用与解析运行实例
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
353 5
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
779 7
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
443 0
|
存储 C#
C#.Net筑基-类型系统②常见类型--结构体类型Struct
本文介绍了C#中的结构体(struct)是一种用户自定义的值类型,适用于定义简单数据结构。结构体可以有构造函数,能定义字段、属性和方法,但不能有终结器或继承其他类。它们在栈上分配,参数传递为值传递,但在类成员或包含引用类型字段时例外。文章还提到了`readonly struct`和`ref struct`,前者要求所有字段为只读,后者强制结构体存储在栈上,适用于高性能场景,如Span和ReadOnlySpan。
397 6
|
传感器 开发框架 JSON
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
857 0
|
文字识别 自然语言处理 C#
印刷文字识别使用问题之C#发票识别的代码实例在哪里可以查看
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
机器学习/深度学习 开发框架 .NET
技术经验解读:【c#】反射真的很可怕吗?
技术经验解读:【c#】反射真的很可怕吗?