MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法。

BNF grammar of fully qualified type names

TypeSpec                          :=   ReferenceTypeSpec

|     SimpleTypeSpec

ReferenceTypeSpec            :=   SimpleTypeSpec '&'

SimpleTypeSpec                :=   PointerTypeSpec

|     ArrayTypeSpec

|     TypeName

PointerTypeSpec                :=   SimpleTypeSpec '*'

ArrayTypeSpec                  :=   SimpleTypeSpec '[ReflectionDimension]'

|     SimpleTypeSpec '[ReflectionEmitDimension]'

ReflectionDimension           :=   '*'

|     ReflectionDimension ',' ReflectionDimension

|     NOTOKEN

ReflectionEmitDimension    :=   '*'

|     Number '..' Number

|     Number '…'

|     ReflectionDimension ',' ReflectionDimension

|     NOTOKEN

Number                            :=   [0-9]+

TypeName                         :=   NamespaceTypeName

|     NamespaceTypeName ',' AssemblyNameSpec

NamespaceTypeName        :=   NestedTypeName

|     NamespaceSpec '.' NestedTypeName

NestedTypeName               :=   IDENTIFIER

|     NestedTypeName '+' IDENTIFIER

NamespaceSpec                 :=   IDENTIFIER

|     NamespaceSpec '.' IDENTIFIER

AssemblyNameSpec           :=   IDENTIFIER

|     IDENTIFIER ',' AssemblyProperties

AssemblyProperties            :=   AssemblyProperty

|     AssemblyProperties ',' AssemblyProperty

AssemblyProperty              :=   AssemblyPropertyName '=' AssemblyPropertyValue

Backus-Naur Form的介绍可以看wikipedia的介绍:Backus–Naur Form。他的主要内容如下:

  1. 在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。
  2. 在双引号外的字(有可能有下划线)代表着语法部分。
  3. 尖括号( < > )内包含的为必选项。
  4. 方括号( [ ] )内包含的为可选项。
  5. 大括号( { } )内包含的为可重复0至无数次的项。
  6. 竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。
  7. ::= 是“被定义为”的意思。

所以MSDN的表格的第一行就是说,TypeSpec定义为ReferenceTypeSpec或者SimpleTypeSpec,而ReferenceTypeSpec又被定义为SimpleTypeSpec '&',SimpleTypeSpec定义为PointerTypeSpec或者ArrayTypeSpec或者TypeName。以此类推。

C#中反射接受的字符串需要满足的Backus-Naur Form语法的更多相关文章

  1. [转载] linux查找目录下的所有文件中是否含有某个字符串

    链接自 http://blog.sina.com.cn/s/blog_691a84f301015khx.html,并略加修订. 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...

  2. linux查找目录下的所有文件中是否含有某个字符串

    查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" find .|xargs grep -ri "IBM" -l ...

  3. 查找目录下的所有文件中是否含有某个字符串 linux

    查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...

  4. 在C++中反射调用.NET(二)

    反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C+ ...

  5. 在C++中反射调用.NET(一)

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编 ...

  6. 在C++中反射调用.NET(三)

    在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...

  7. Java中反射的实现方式

    所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Method)以及调用其中的方法 ...

  8. linux查看目录下所有文件内容中是否包含某个字符串

    转发自:http://blog.csdn.net/yimingsilence/article/details/76071949 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...

  9. JS 中 JSON 对象与字符串之间的相互转换

    在开发的过程中,如果对于少量参数的前后台传递,可以直接采用ajax的data函数,按json格式传递,后台Request即可,但有的时候,需要传递多个参数,这样后台 接受的时候Request多个很麻烦 ...

随机推荐

  1. Qt Quick 与 QML语言(初学笔记1)

    Qt Quick Qt Quick是一些新的UI技术的集合,用来帮助开发者创建一种现在越来越多用于手机.多媒体播放器.机顶盒以及其他便携式设备上的直观的.现代的.流畅的用户界面.简单来说,Qt Qui ...

  2. css样式积累

    1.圆角:     border-radius:16px 16px 16px 16px;     2透明度:             filter: alpha(opacity=80);       ...

  3. excel poi 文件导出,支持多sheet、多列自动合并。

    参考博客: http://www.oschina.net/code/snippet_565430_15074 增加了多sheet,多列的自动合并. 修改了部分过时方法和导出逻辑. 优化了标题,导出信息 ...

  4. sql语句复制表

    1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable; ...

  5. H - A+B for Input-Output Practice (VII)

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description You ...

  6. 转:使用xhprof进行线上PHP性能追踪及分析

    原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...

  7. oracle 对象权限 系统权限 角色权限

    系统权限: 允许用户执行特定的数据库动作,如创建表.创建索引.连接实例等 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列.执行存储过程等 select * from user_sys ...

  8. BZOJ 1035 Risk

    Description 经过连续若干年的推广,Risk这个游戏已经风靡全国,成为大众喜闻乐见的重要娱乐方式.Risk这个游戏可以理解为一种简易的策略游戏,游戏者的目的是占领所有的土地.由于游戏规则的规 ...

  9. 15.禁用ViewState

    默认情况下ASP.net是启用ViewState的,这样在页面中会生成冗长的隐藏字段,ViewState对于需要PostBack处理的页面才可能有用,对于不需要交互的页面则完全没有必要用ViewSta ...

  10. left join 、right join 、inner join和 full join的区别

    内连接      INNER JOIN(等值连接):只显示两个表中联结字段相等的行.这个和用select查询多表是一样的效果,所以很少用到: 外连接:LEFT JOIN :以左表为基础,显示左表中的所 ...