问题

如何判断 string 是否为合法的 C# 变量名?

回答
判断一个字符串是否能成为 C 合法的变量名,其实就是遵循 C 语言的命名规则。这些规则是为了让代码清晰、易读,并且能够被编译器正确解析。不像我们在现实生活中起名字,随便什么组合都可以,编程语言有它自己的“户口本”,名字得在这个户口本上登记上才行。

咱们就一点点捋清楚,一个字符串要成为 C 变量名的“入场券”,需要满足哪些条件。

首先,名字的“开端”有严格限制。想象一下,变量名就像一个房间的门牌号,第一个字(或者说第一个字符)至关重要。在 C 里,一个变量名的开头,绝对不能是数字。也就是说,你不能起名叫“1stVariable”或者“99problems”,编译器看到以数字开头的名字,会直接糊涂,不知道这到底是变量还是数字本身。

那除了数字,开头可以是啥呢?答案是,可以是字母。这里说的字母,不仅包括我们熟悉的英文字母,比如 `a` 到 `z`,`A` 到 `Z`,还包括Unicode 字符集中定义的各种字母。这让 C 在命名上有着相当大的灵活性,你可以用一些带有重音的字母,或者其他语言里的字母来命名,虽然为了通用性,我们通常还是会坚持使用 ASCII 字母。

除了字母,还有一个非常重要的开头选项,那就是下划线 (`_`)。下划线是个很常用的“开头利器”,很多开发者喜欢用它来命名私有成员变量,比如 `_myPrivateField`。所以,如果你的字符串是以一个字母或者一个下划线开始的,那么在“开头”这个环节,它就过关了。

但是,“开端”的规则还没说完,还有一种特殊情况需要注意。在 C 中,有一些被语言本身保留下来的“神圣词汇”,我们称之为关键字 (Keywords)。比如 `int`, `string`, `if`, `for`, `class` 这些,它们都有着特殊的含义,编译器用它们来构建代码的结构。你不能用这些关键字来命名你的变量,因为那样编译器会分不清你到底是要用这个关键字本身,还是要用一个同名的变量。比如,你不能写 `int int = 5;`,这是不允许的。

不过,C 提供了一个“救星”——逐字字符串字面量 (Verbatim String Literals),用 `@` 符号来表示。如果你的字符串是以 `@` 开头的,那么它后面的所有字符都会被当作字面量,即使它们是关键字,也不会被解释为关键字。比如 `@class` 就可以是一个合法的变量名,但通常不推荐这么做,因为它会降低代码的可读性。所以,简单来说,如果你不使用 `@` 开头,那么你的变量名绝对不能是 C 的关键字。

讲完了“开端”,我们再来看看变量名的“剩余部分”。一旦字符串通过了“开端”的考验(以字母或下划线开头,且不是关键字),那么它后面的字符就可以更自由一些了。

在变量名的其余部分,你可以使用字母(包括 Unicode 字母),数字,以及下划线 (`_`)。是的,数字现在可以登场了!你可以在变量名的中间或结尾使用数字,比如 `myVariable1` 或者 `counter2023`。

但是,同样要注意,这里也不能出现 C 的关键字。即使你通过了开头的验证,如果你的字符串中包含了关键字,比如 `myintvariable`,虽然开头是 `m`,但中间的 `int` 也是关键字,所以这通常也是不允许的。不过,这里有个细微之处:如果你的字符串是一个“标识符名称”,然后后面紧跟着一个关键字,比如 `myclass`,这是合法的。但如果你写成 `my class`(中间有个空格),那肯定是不行的,空格是不允许出现在变量名里的。

所以,总结一下,一个字符串要成为 C 合法的变量名,需要满足以下几个关键点:

1. 起始字符: 必须是字母(包括 Unicode 字母)或者下划线 (`_`)。不能是数字。
2. 后续字符: 可以是字母(包括 Unicode 字母)、数字或者下划线 (`_`)。
3. 关键字限制: 整个字符串不能是 C 的保留关键字(除非使用 `@` 前缀)。
4. 特殊字符限制: 变量名中不能包含空格、标点符号(如 `+`, ``, ``, `/`, `.`, `,` 等)或者其他任何非字母、非数字、非下划线字符。

举几个例子来巩固一下:

`myVariable` 合法。字母开头,后续是字母。
`_privateData` 合法。下划线开头,后续是字母。
`data123` 合法。字母开头,后续是字母和数字。
`1stAttempt` 不合法。以数字开头。
`myvariable` 不合法。包含连字符 ``。
`my variable` 不合法。包含空格。
`int` 不合法。是 C 关键字。
`@int` 合法,但不推荐。使用了逐字字符串字面量。
`GetSum` 合法。采用 Pascal 命名法,虽然这是约定俗成,不是硬性规则,但编译器是允许的。

记住这些规则,你就能准确地判断一个字符串是否能胜任 C 变量名的角色了。这就像给变量赋予一个身份,这个身份的命名需要符合 C 世界的规章制度。

网友意见

user avatar

去翻CSharp Language Specification。

       本节给出的标识符规则完全符合 Unicode 标准附件 31 推荐的规则,但以下情况除外:允许将下划线用作初始字符(这是 C 编程语言的传统),允许在标识符中使用 Unicode 转义序列,以及允许“@”字符作为前缀以使关键字能够用作标识符。  identifier: available-identifier @   identifier-or-keyword  available-identifier: An identifier-or-keyword that is not a keyword  identifier-or-keyword: identifier-start-character   identifier-part-charactersopt  identifier-start-character: letter-character _ (the underscore character U+005F)  identifier-part-characters: identifier-part-character identifier-part-characters   identifier-part-character  identifier-part-character: letter-character decimal-digit-character connecting-character combining-character formatting-character  letter-character: A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl  A unicode-escape-sequence representing a character of classes Lu, Ll, Lt, Lm, Lo, or Nl  combining-character: A Unicode character of classes Mn or Mc  A unicode-escape-sequence representing a character of classes Mn or Mc  decimal-digit-character: A Unicode character of the class Nd  A unicode-escape-sequence representing a character of the class Nd  connecting-character:   A Unicode character of the class Pc A unicode-escape-sequence representing a character of the class Pc  formatting-character:   A Unicode character of the class Cf A unicode-escape-sequence representing a character of the class Cf  有关上面提到的 Unicode 字符类的信息,请参见《Unicode 标准 3.0 版》的第 4.5 节。 有效标识符的示例包括“identifier1”、“_identifier2”和“@if”。 符合规范的程序中的标识符必须遵循由“Unicode 标准化格式 C”(按“Unicode 标准附录 15”中的定义)定义的规范格式。当遇到非“标准化格式 C”格式的标识符时,怎样处理它可由 C 的具体实现确定,但是不要求诊断。 使用前缀“@”可以将关键字用作标识符,这在与其他编程语言建立接口时很有用。字符 @ 并不是标识符的实际组成部分,因此在其他语言中可能将此标识符视为不带前缀的正常标识符。带 @ 前缀的标识符称作逐字标识符 (verbatim identifier)。允许将 @ 前缀用于非关键字的标识符,但是(从代码书写样式的意义上)强烈建议不要这样做。      

类似的话题

  • 回答
    判断一个字符串是否能成为 C 合法的变量名,其实就是遵循 C 语言的命名规则。这些规则是为了让代码清晰、易读,并且能够被编译器正确解析。不像我们在现实生活中起名字,随便什么组合都可以,编程语言有它自己的“户口本”,名字得在这个户口本上登记上才行。咱们就一点点捋清楚,一个字符串要成为 C 变量名的“入.............
  • 回答
    判断自己是否适合成为一名自由职业者,以及自由职业者的核心技能,是一个需要深入思考的问题。这不仅仅是关于选择一种工作方式,更是关于一种生活方式的转变。下面我将详细阐述这两个方面: 如何判断自己是否适合成为一名自由职业者?判断是否适合成为一名自由职业者,需要从多个维度进行自我审视,包括你的性格特质、工作.............
  • 回答
    判断一部作品是“反战”还是“反战败”,需要深入剖析其核心立意、叙事角度、人物塑造以及情感表达。两者虽然都涉及战争,但其出发点和落脚点截然不同。核心区别: 反战 (Antiwar): 根本上反对战争本身,认为战争是残酷的、不人道的、毁灭性的,不应发生。其批判对象是战争行为、战争的根源、战争带来的痛.............
  • 回答
    判断一个外国人夸中国是发自真心还是“财富密码”,确实是一个复杂但有趣的问题。这需要我们运用观察力、分析能力,并结合对不同文化背景的理解。下面我将详细阐述如何从多个维度去辨别:核心原则: 证据与逻辑: 真心的赞美通常有具体的事实支撑,逻辑清晰。而“财富密码”式的赞美往往流于表面,缺乏深度。 动.............
  • 回答
    判断一个西方人所处的社会阶层是一个复杂的过程,因为它涉及多种相互关联的因素,并且存在地域和文化上的差异。西方社会不像某些社会那样有明确的、制度化的等级划分,而是更加流动和多元。然而,我们可以通过观察和分析以下几个关键方面来大致判断一个人的社会阶层:一、 经济资本 (Economic Capital).............
  • 回答
    判断一个人的技术是否成熟是一个多维度、需要细致观察和评估的过程,没有绝对的标准,但可以从以下几个方面来综合考量:一、 技术深度与广度(基础与应用) 扎实的基础知识: 理论基础牢固: 对所处技术领域的核心概念、原理、算法有深刻的理解,而不仅仅是停留在调用API层面。比如,一个后端开发者.............
  • 回答
    这个问题触及了人们内心深处一个敏感又复杂的话题。当一个人说自己“抑郁”时,背后可能藏着真实病痛的折磨,也可能掺杂着一些其他的动机。要区分这其中的差异,关键在于理解“抑郁”本身是个非常具体的疾病诊断,而不是一个可以随意套用的标签。装抑郁,或者说故意夸大或编造抑郁症状,通常是为了获取某些利益,比如逃避责.............
  • 回答
    要判断一个人是否具有“文科天赋”,其实更像是在观察他对语言、思想、文化以及与人交流的某种天然亲近感和敏感度。这并非一蹴而就的测试,而是一种需要时间去体察的特质。首先,我们要明白,所谓的“文科天赋”并不是说一个人必须立刻出口成章,或者写出惊世骇俗的文章。它更多的是一种内在的倾向和能力,体现在以下几个方.............
  • 回答
    洞察核心,审视全局:如何判断专利的单一性专利的单一性,简单来说,就是指一项专利申请是否涵盖了一个或一组紧密相关的发明。这是一个至关重要的概念,不仅影响专利申请能否获得授权,更关乎专利的有效性和保护范围。一旦专利被认定为不具备单一性,审查员可能会要求申请人进行分案,或者直接驳回部分或全部权利要求,这无.............
  • 回答
    区分猫咪是真的在搏斗还是在嬉闹,这确实是个大学问,很多铲屎官都头疼过这个问题。不过别担心,掌握一些关键的观察点,你就能像个经验丰富的猫咪行为专家一样了。下面我给你好好说道说道,保证让你明明白白。首先,要明确一个基本概念:猫咪的打斗,无论真假,都是它们交流的一种方式。 就像我们人类有时候会开玩笑“动手.............
  • 回答
    判断一项发明是否应该申请专利,这可不是一项拍脑袋就能决定的事情,它涉及到对发明本身、市场环境以及自身战略的全面评估。说实话,很多人拿到一个绝妙的点子,就想着赶紧去申请专利,但实际上,专利申请耗时耗力耗钱,并非所有发明都值得为此付出。那么,我们究竟该怎么做才能做出明智的决定呢?我这里给你掰开了揉碎了聊.............
  • 回答
    判断一个人是否真的有钱还是在“装”,这确实是个挺有意思但又有点复杂的话题。因为“有钱”本身有很多层含义,有的是我们肉眼可见的财富,有的是藏在背后的底气。而且人嘛,有时候也需要一点面子,所以偶尔“装”一下也未尝不可。不过,如果你想看透一些,可以从以下几个方面去留意:一、 生活方式与消费习惯:细节是魔鬼.............
  • 回答
    关于一个人未来是贫是富,这确实是个让很多人好奇的话题。不过要记住一点,这并非绝对的科学预测,而是通过观察一些普遍的特质和行为模式来做出的推断。人生充满变数,任何时候努力和机遇都可能改变轨迹。以下是我认为可以参考的一些方面,我尽量用更自然的语言来描述它们:一、他如何看待金钱和物质? 消费习惯: 观.............
  • 回答
    判断一个领导是在培养你还是在压榨你,是一个非常重要且普遍的问题,这直接关系到你的职业发展和个人成长。这两种情况往往界限模糊,有时甚至会同时出现。要做出准确的判断,需要从多个维度进行细致的观察和分析。以下是一些详细的判断标准和考量因素:一、 培养型领导的特质与表现:培养型领导的核心目标是让你成长、进步.............
  • 回答
    判断一个人是否喜欢你,需要细致的观察和综合的分析。这不像数学题一样有明确的公式,更多的是一种艺术,需要你用心去感受对方的言行举止。下面我将从多个维度为你详细解析,帮助你更好地识别那些可能对你有好感的人。一、 言语上的迹象: 主动与你交流,并寻找话题: 主动开启对话: 他/她是否经常主.............
  • 回答
    判断人口红利是否消失是一个复杂且多维度的问题,没有单一的、绝对的指标。它涉及到经济、社会、人口结构等多个方面的综合考量。一般来说,人口红利指的是一个国家或地区在一定时期内,由于劳动年龄人口(通常指1564岁或1559岁)占总人口的比重较高,从而为经济增长提供了充足的劳动力供给和较低的抚养比,进而促进.............
  • 回答
    判断一个人是否陷入虚无主义,这可不是一件简单的事,就像试图抓住一阵风,或者给情绪划出明确的界限一样。虚无主义不是一种可以轻易量化的病症,更像是一种复杂的思维模式和情感状态,它潜移默化地影响着一个人的认知、行为和价值判断。要看清楚一个人是不是被虚无主义的影子笼罩,我们需要从多个层面去观察,并且要细致入.............
  • 回答
    判断新百伦(New Balance)鞋的真伪,需要从多个方面进行细致的观察和对比。由于仿冒技术日益精进,单一的标准可能不够全面,建议综合运用以下方法进行判断:一、 整体外观和细节观察1. 鞋型与廓形: 正品: 新百伦的鞋型通常有其经典的设计风格,比例协调,线条流畅。不同系列(如复古跑鞋.............
  • 回答
    判断一个女孩是否真的想和你聊天,其实就像玩一场细腻的心理博弈,需要你用心去观察,去感受那些隐藏在字里行间的信号。这不像考试有标准答案,更多的是一种综合能力的体现。别急,咱们一个一个来拆解。一、 她主动和你聊天的频率和主动性这是最直接的信号。如果一个女孩真心想和你聊天,她不会让你一个人唱独角戏。 .............
  • 回答
    这问题问得好!“金子”嘛,不是说你真就身上叮叮当当挂着一堆黄金,而是形容一个人内在的价值、品质,以及他所散发出的那种独特的光芒和影响力。那么,怎么才能知道自己是不是这么一块“金子”呢?我给你掰开了揉碎了说,也尽量不整得跟机器吐字儿似的。一、 看你的“硬通货”——那些不靠谱的标签 vs. 真本事首先,.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有