【问题标题】:How to check if a class is partial using reflection [duplicate]如何使用反射检查一个类是否是部分的[重复]
【发布时间】:2021-08-11 10:36:49
【问题描述】:

我有一个系统使用CallerLineNumber 属性来排序方法,以便我稍后根据它们的声明顺序检索它们。
这很好用,但它不支持在不同文件之间拆分的部分类。
我不关心在我的系统中支持部分类,但是如果有人试图在我的系统中使用部分类,我想发出一个异常,所以基本上,我需要一种方法来知道一个类是否被声明为部分类,使用反射我想。
我的一个想法是使用CallerFilePath 属性来检查脚本的属性是否都来自同一个文件,但我想知道是否有更简单的方法。
谢谢。

【问题讨论】:

  • 我不知道更简单的方法。如果CallerLineNumberCallerFilePath 属性适用于您的逻辑,也许您可​​以考虑同时使用它们来正确支持部分类?
  • " 我需要一种方法来知道一个类是否被声明为部分" -- 一旦编译,类的不同部分来自不同源文件的唯一指示(即partial 声明)是源文件的名称,可以在 [CallerFilePath] 属性中设置或在 .pdb 数据中找到。就程序集元数据而言,这是一回事。这在副本中进行了概述,这也解决了您对基于声明顺序的排序方法的更广泛关注。

标签: c#


【解决方案1】:

在编译时部分类的属性被合并。因此,无法通过反射检查类是否是部分的(因为也无法查看局部变量的名称、注释和预处理器指令)。

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多