C#中@的用法总结(转)

2023-11-10

本文实例汇总了C#中@的用法,对C#程序设计来说有不错的借鉴价值。具体如下:

一 字符串中的用法

1.学过C#的人都知道C# 中字符串常量可以以@ 开头声名,这样的优点是转义序列“不”被处理,按“原样”输出,即我们不需要对转义字符加上 \ (反斜扛),就可以轻松coding。如,

string filePath = @"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt" 

2.如要在一个用 @ 引起来的字符串中包括一个双引号,就需要使用两对双引号了。这时候你不能使用 \ 来转义爽引号了,因为在这里 \ 的转义用途已经被 @ “屏蔽”掉了。如,

@"""Ahoy!"" cried the captain."  // 输出为: "Ahoy!" cried the captain. 

这有点像SQL中的单引号常量处理方式:

DECLARE @msg varchar(100) 
SET @msg = ''Ahoy!'' cried the captain.' -- 输出为: 'Ahoy!' cried the captain. 

3.@会识别换行符

其实这个特性,我不知道怎么描述,只是偶然发现的,先来看看下面的代码:

string script = @" 
<script type=""type/javascript""> 
function doSomething() 
{ 
} 
</script>"; 

这段代码在cs文件中写js,结构就很清晰了,正常情况我们是这样coding的:

string script2 = "<script type=\"type/javascript\">function doSomething(){}</script>"; 

或者:

string script3 = 
"<script type=\"type/javascript\">" + 
"function doSomething(){ " + 
"}</script>"; 

通常我们会选择后者,因为js代码一般比较长,或者方法体很大,或者需要连接其他变量,这样结构比较清晰。

注意:如果“拼接”的次数很多,应该考虑使用StringBuilder了,有助于提高性能。

还有一种场景,也很常见,在程序中拼接 SQL 语句,如

private const string SQL_INS_USER = @" 
INSERT INTO t_User([UserName], [Password], Email)  
 VALUES(@UserName, @Password, @Email)"; 

这样就像写存储过程一般,保持相当高的代码清晰度。然而,我们需要关注一个问题:字符串长度看下面的测试代码:

private const string SQL_INS_USER1 = @" 
  INSERT INTO t_User([UserName], [Password], Email)  
 VALUES(@UserName, @Password, @Email)"; 
 
private const string SQL_INS_USER2 = @"INSERT INTO t_User([UserName], [Password], Email)  
 VALUES(@UserName, @Password, @Email)"; 
 
private const string SQL_INS_USER3 = @"INSERT INTO t_User([UserName], [Password], Email) VALUES(@UserName, @Password, @Email)";  
 
static void Main(string[] args) 
{ 
  Console.WriteLine(SQL_INS_USER1.Length);  // 126  
  Console.WriteLine(SQL_INS_USER2.Length);  // 112 
  Console.WriteLine(SQL_INS_USER3.Length);  // 86 
} 

这里可以看到三个字符串长度分别相差了,14=126-112和26=112-86,注意观察了,在代码编辑器中,SQL_INS_USER1 中第一个换行符号之后,我缩进13个空格(INSERT之前),而
SQL_INS_USER2 中第一个换行符号之后,我缩进25个空格(VALUES之前),
那么,加上一个换行符,刚刚好 14和26

如此编写代码,虽然提高了代码的清晰度和简便性,却无行中带来了另一个问题:字符长度!
很多场景下我们希望字符串越短越好,如,通过ADO.NET 发送 SQL 语句给数据库执行。
所以还是慎用之!

二 标识符中的用法

在 C# 规范中, @ 可以作为标识符(类名、变量名、方法名等)的第一个字符,以允许C# 中保留关键字作为自己定义的标识符。

如下代码:

class @class
{ 
  public static void @static(bool @bool) { 
   if (@bool) 
     System.Console.WriteLine("true"); 
   else
     System.Console.WriteLine("false"); 
  }   
} 
class Class1 
{ 
  static void M() { 
   cl\u0061ss.st\u0061tic(true); 
  } 
} 

注意,@虽然出现在标识符中,但不作为标识符本身的一部分。
因此,以上示例,定义了一个名为 class 的类,并包含一个名为 static 的方法,以及一个参数名为了 bool 的形参。

这样,对于跨语言的移植带来了便利。因为,某个单词在 C# 中作为保留关键字,但是在其他语言中也许不是。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中@的用法总结(转) 的相关文章

  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码

随机推荐

  • 2023自动化测试需知的4项测试工具!

    一般来说学自动化会建议大家先学selenium 因为最早的时候 自动化就代表selenium 进入测试行业就开始做接口测试 而且现在基本每个公司都需要接口测试 今天就和大家聊一下接口测试的工具 一 Robot Framework 机器人框架
  • Ubuntu添加和设置默认中文字体

    参考 https blog csdn net gengyuchao article details 101215243 首先 通过命令 fc list lang zh 可以查看已安装的中文字体 默认为Ubuntu系统自带的中文字体 安装新字
  • x的n次幂

    题目描述 实现 pow x n 即计算 x 的 n 次幂函数 样例 输入 2 00000 10 输出 1024 00000 说明 100 0 lt x lt 100 0 n 是 32 位有符号整数 其数值范围是 2147483648 214
  • NexT 主题自定义侧边栏图标

    NexT 主题的图标基本上都是由 Font Awesome 提供 但是知乎 CSDN bilibili等大多数国内应用软件的图标在Font Awesome都不支持 为了支持侧边栏各种应用小图标的显示 可以利用嵌入svg格式的图标进行实现 本
  • keil5编译器出现Undefined symbol time (referred from xxx.o).

    我前不久再弄基于stm32控制智能小车电机时 经常出现 error Undefined symbol time referred from xxx o 很烦人 后来我发现了解决办法 在这里我要分享给大家 方法 直接在xxx c文件中给tim
  • Nim游戏详解

    文章目录 废话 正题 证明 举个栗子 拓展题 废话 这是一个过于经典且过于常见的博弈论模型 入门博弈论的话 首先肯定是要知道这个的 正题 N i m Nim Nim 游戏的规则 有 n
  • 数据结构和算法(4)-----栈

    一 栈的一个实际需求 例如 请输入一个表达式计算式 7 2 2 5 1 5 3 3 点击计算 如下图 请问 计算机底层是如何运算得到结果的 注意不是简单的把算式列出运算 因为我们看这个算式 7 2 2 5 但是计算机怎么理解这个算式的 对计
  • 2023“钉耙编程”中国大学生算法设计超级联赛(3)

    Chaos Begin 贪心 凸包 Out of Control DP 递推 Operation Hope 贪心 2 sat与二分 8 bit Zoom 二维前缀 Noblesse Code 轨迹哈希 字典序 差分 Problem 7303
  • 训练集、验证集以及测试集的区别

    1 数据集的划分 训练集 含有参考答案的数据 用来训练模型的已标注数据 用来建立模型 发现规律 验证集 模型训练过程中单独留出的样本集 用于调整模型的超参数和用于对模型的能力进行初步评估 测试集 用来评估模最终模型的泛化能力 但不能作为调参
  • 【cdk的使用】 C语言 零拷贝 链表 队列 栈的使用

    Github地址 https github com wujin1989 cdk cdk的 list 是基于双向循环链表实现 queue 和 stack 基于 list实现 所以cdk用一个双向循环链表实现了三种数据结构 如何使用cdk的链表
  • Python ·保险理赔分析:数据分析

    介绍 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 在本笔记本中 我们将仔细研究保险索赔 并弄清一些有关血压 BMI 糖尿病 吸烟 年龄和性别等条件如何影响索赔价值的事实 我们将使用散点图 饼图 直方图等通过探索性数据分
  • dnn回归预测_Keras之DNN:基于Keras(sigmoid+linear+mse+predict)利用DNN实现回归预测——DIY多分类数据集&预测新数据点...

    Keras之DNN 基于Keras sigmoid linear mse predict 利用DNN实现回归预测 DIY多分类数据集 预测新数据点 目录 输出结果 实现代码 输出结果 实现代码 coding utf 8 Xa Xb for
  • postman 下载图片_postman测试上传图片接口步骤教程

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 前端也要学会使用 只有这样 当接口调试不通的时候 用测试工具 才能够更有底气的甩一张截图给你家的后端 瞧 这是你写的bug 现在来说一下 怎么测试一个上传图片的
  • 工作日志【 SQL内部规范-ETL银行项目 】

    工作日志 SQL内部规范 ETL银行项目 一 表结构设计 建表时 首先要确定表的业务唯一键 即该表的唯一索引由哪些字段构成 不建议创建没有唯一索引的表 如果要修改表的唯一索引 一定要严格评审 前台 表结构变更 F层的表需要通知JAVA开发
  • SpringCloud项目下使用分布式事务seata TCC模式与AT模式例子

    SpringCloud项目下使用分布式事务seata TCC模式与AT模式例子
  • 3-2 特征二值化

    特征二值化 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd pm25 pd read csv home aistudio data data20505 pm2 csv pm25 he
  • 使用Flex&Bison创建新的编程语言

    编译器基本流程 对源文件进行扫描 将源文件的字符流拆分分一个个的词 记号 此为词法分析 根据语法规则将这些记号构造出语法树 此为语法分析 对语法树的各个节点之间的关系进行检查 检查语义规则是否被违背 同时对语法树进行必要的优化 此为语义分析
  • 苹果个人公司类型开发者账号申请(99美元)详解

    最近有用 记录一下 谈到苹果开发者账号 我们需要区分一下个人账号 公司账号和企业账号这三种 还有一种是教育账号 这个就不多说了 个人账号 个人申请用于开发苹果app所使用的账号 仅限于个人使用 申请比较容易 99 公司账号 以公司的名义申请
  • jqgrid 自定义搜索的实现 , 后台实现

    好久没写过博客了 新入职公司比较忙 咳咳 其实是比较懒 最近公司要求做一个后台 于是直接巴拉了bootstrap 的ace折叠菜单改造了下 由于大部分都是数据交互 频繁使用了 ace中包含的 jqgrid 要做后台的朋友可以去搜索一下ace
  • C#中@的用法总结(转)

    本文实例汇总了C 中 的用法 对C 程序设计来说有不错的借鉴价值 具体如下 一 字符串中的用法 1 学过C 的人都知道C 中字符串常量可以以 开头声名 这样的优点是转义序列 不 被处理 按 原样 输出 即我们不需要对转义字符加上 反斜扛 就