gpt4 book ai didi

linq - 如何辨别 Type 是否是静态数组初始值设定项?

转载 作者:行者123 更新时间:2023-12-04 06:10:58 25 4
gpt4 key购买 nike

我将首先说我正在消除静态数组初始值设定项被编译器转换为私有(private)嵌套类的假设,通常具有像 __StaticArrayInitTypeSize=12 这样的名称。 .据我了解,已阅读 this extremely informative article ,这些私有(private)类是值类型,它们没有用 CompilerGeneratedAttribute 标记类(class)。

我正在做一个需要处理某些类型并忽略其他类型的项目。

我必须能够处理自定义结构类型,就像生成的静态数组初始值设定项类一样,它们是值类型。我必须忽略生成的静态数组初始值设定项类。我还必须忽略枚举和委托(delegate)。

我正在使用 Linq 提取这些类,如下所示:

var typesToProcess = allTypes.Where(type => !type.IsEnum &&
!type.IsArray &&
!type.IsSubclassOf(typeof(Delegate)));

我相当确定 IsArray属性(property)不是我想的那样。无论如何,生成的静态数组初始值设定项类仍然显示在 typesToProcess 中。可枚举。

有没有其他人处理过这个?如何辨别自定义结构和生成的静态数组初始值设定项类之间的区别?我可以通过将类型名称与 __StaticArrayInitTypeSize 进行字符串比较来破解它。 ,但是有更清洁的解决方案吗?

最佳答案

好吧,我自己用 C# 4 编译器尝试过,我得到了一个名为 <PrivateImplementationDetails>{D1E23401-19BC-4B4E-8CC5-2C6DDEE7B97C} 的内部类。包含一个名为 __StaticArrayInitTypeSize=12 的私有(private)嵌套结构.

该类包含一个名为 $$method0x6000001-1 的结构类型的内部静态字段。 . field 本身装饰有 CompilerGeneratedAttribute .

问题是所有这些都是特定于实现的。它可能会在 future 的版本中发生变化,或者也可能与早期版本不同。

任何包含 < 的成员名称, >=是由编译器生成的“不可描述”的名称,因此您可以将其视为一种隐含的 CompilerGenerated ,如果这有任何用处。 (不过,此类生成的类型还有许多其他用途。)

关于linq - 如何辨别 Type 是否是静态数组初始值设定项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7773945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com