加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式:C#方法声明解析

发布时间:2020-12-14 05:36:14 所属栏目:百科 来源:网络整理
导读:有人可以帮我解析C#方法声明:scope,isStatic,name,返回类型和参数列表及其类型.所以给出这样的方法声明 public static SomeReturnType GetSomething(string param1,int param2) 我需要能够解析它并获得上面的信息.所以在这种情况下 name =“GetSomething”
有人可以帮我解析C#方法声明:scope,isStatic,name,返回类型和参数列表及其类型.所以给出这样的方法声明

public static SomeReturnType GetSomething(string param1,int param2)

我需要能够解析它并获得上面的信息.所以在这种情况下

> name =“GetSomething”
> scope =“public”
> isStatic = true
> returnType =“SomeReturnType”

然后是参数类型和名称对的数组.

哦差点忘了最重要的部分.它必须考虑所有其他范围(受保护,私有,内部,受保护的内部),缺少“静态”,无效返回类型等.

请注意,REFLECTION不是解决方案.我需要REGEX.

到目前为止,我有这两个:

(?:(?:public)|(?:private)|(?:protected)|(?:internal)|(?:protected internal)s+)*

(?:(?:static)s+)*

我猜其余的问题我可以在没有正则表达式的情况下使用字符串操作.

解决方法

关于你的问题的一些想法:

一组可以由特定正则表达式匹配的字符串称为常规语言.在任何C#版本中,作为合法方法声明的字符串集不是常规语言.如果您试图找到一个匹配每个合法C#方法声明的正则表达式并拒绝每个非法的C#方法声明,那么您就不走运了.

更一般地说,除了最简单的匹配问题之外,正则表达式几乎总是一个坏主意. (对不起杰夫.)更好的方法是先写一个词法分析器,将字符串分解为一系列标记.然后分析令牌序列. (使用正则表达式作为词法分析器的一部分并不是一个可怕的想法,尽管没有它们可以顺利完成.)

我还注意到,您在解析方法声明时遇到了很多复杂问题.你没有提到:

> generic / array / pointer / nullable return和formal参数类型
>泛型类型参数声明
>泛型类型参数约束
> unsafe / extern / new / override / virtual / abstract / sealed方法
>显式接口实现方法
>方法/参数/返回属性
>部分方法 – 解析时有点棘手,partial是上下文关键字
>评论

我还注意到,你没有说过你是否保证方法签名已经很好,或者你是否需要识别不良方法并产生诊断,说明它们为什么不好.这是一个更难的问题.

你为什么要首先这样做?正确地做这件事是相当多的工作.也许有一种更简单的方法来获得你想要的东西?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读