c# - 如何确定 .NET 类型是否为自定义结构?

标签 c# .net reflection struct types

<分区>

如何编写一个简单的方法来检查具体类型是否为自定义结构(使用 public struct { }; 创建)。

检查 Type.IsValueType 是不够的,因为它也适用于 intlong 等, 并向 !IsPrimitiveType 添加检查不会排除 decimalDateTime 和可能的其他一些值类型。我知道大多数内置值类型实际上是“结构”,但我只想检查“自定义结构”

这些问题大多相同,但没有我需要的答案:

编辑:从提到的答案中,“检查‘系统’前缀”是最稳定的(尽管它仍然是一种 hack)。我最终决定创建一个属性,您必须用它来装饰结构,以便框架将其作为自定义结构来获取。 (我想到的另一种选择是创建一个空接口(interface),让结构体实现那个空接口(interface),但属性方式似乎更优雅)

如果有人感兴趣,这是我原来的自定义结构检查器:

type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum

最佳答案

框架中定义的struct和自己定义的struct没有区别。

一些想法可能是:

  • 保留框架结构的白名单,并将其排除在外;
  • 识别定义类型的程序集 (DLL),并保留框架程序集的白名单。
  • 确定类型所在的 namespace ,并排除框架 namespace 。

关于c# - 如何确定 .NET 类型是否为自定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713900/

相关文章:

c# - Unity 包错误 "the type of namespace could not be found"

.net - 站点暴露于 TLSv1.0 并启用了 TLSv1.1

java - 使用反射在 Java 中调用 getter

C#:背景色问题

c# - 试图让 ef 核心迁移在迁移到 .net 核心 2 的项目上工作

c# - 有没有办法在 .NET 中进行 'correct' 算术舍入?/C#

.net - 使用 VB.net 和 excel(组合框和搜索)

c# - System.Reflection.Assembly.GetExecutingAssembly() 总是返回 0.0.0.0

java - 是否可以定义一个 Java 类加载器,它返回与所请求的完全不同的类?

c# - ASP.NET ViewModel 替代方案