C#奇葩关键字——忐忑

那就认识认识吧,可是又太多,所以也只能是想到哪里是哪里,我们这就让思绪自由飞翔一会吧!

1、@

这个东东看似和邮件有关啊,但是在C#的世界里,可跟邮件没有一毛钱关系,它是string的女朋友(当然了string有N多女友),二者结合就可以发挥作用了。你可以给它起个名字,叫做“逐字字符串”,或者别的什么东东都行,这都不重要,关键你要会泡它~

在处理字符串时,那些个字符串转义字符我们可伤不起,一个个的记又记不住,用了还要查,麻烦的不行,那@就是为解决这个而诞生的,直接让字符串原样输出有木有?什么sql字符串了,还有路径啥了的,统统搞定

string sql = @"select * from student where id = '001'";
//实际sql输出select * from student where id = '001'
string path = @"C:\MDocu\student.xml";
//实际path输出C:\MDocu\student.xml,注意这里可不是\\哦

如果字符串里边包含双引号时,要稍微处理一下,那就是在双引号的外边再加双引号即可

string s = @"He said,""yes""";
//s输出He said,"yes"

2、is

目的就一个,检查变量是不是给定的类型,是就返回true,不是就false了,比较简单,一笔带过了

int i = 5;
bool check = i is int;//check = true

3、as

用于在兼容的引用类型之间执行转换。例如

string s = someObject as string;
if (s != null)
{
// someObject is a string.
}

as运算符类似于强制转换操作;但是,如果转换不可行,as会返回null而不是引发异常。更严格地说,这种形式的表达式 等效于

expression is type ? (type)expression : (type) null

as 运算符只执行引用转换和装箱转换。as运算符无法执行其他转换,如用户定义的转换,这类转换应使用cast表达式来执行。

4、sizeof

用于获取非托管类型的大小(以字节为单位)

int intSize = sizeof(int);//intSize = 4

5、typeof

返回Type对象,该对象保存类型信息

Type myType = typeof(int);
console.writeline("Type:{}",myType);
//输出Type:System.Int32

6、checked

检测操作的溢出情况

short a =20000,b=20000;
short myShort = checked((short)(a+b));
//error

7、unchecked

忽略溢出关键字,接受结果而不管溢出情况,默认是不检查溢出的

short a =20000,b=20000;
short myShort = checked((short)(a+b));
//忽略error

8、Guid

全局唯一标示符,是一个128位的字符串,在任何要以唯一方式来表示某个事物时就可以用该屌丝。

uniquecode = Guid.NewGuid ();
console.WriteLine("myCode:{}",uniquecode.ToString());
//输出:myCode:cabfe0ba-fa72-4c5c-969f-e76821949ff1

9、?

可空类型

public class student
{
private string name;
private int? age=null;
public string Name
{
get { return name; }
set { name = value; }
}
public int? Age
{
get { return age; }
set { age = value; }
}
}
student s = new student();
s.Age = null;//是允许的

10、??

null接合操作符,也可以说是双问号操作符,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的

DateTime? createDate = null;
DateTime? defaultDate= null;
DateTime secondDate = DateTime.Now;
createDate = createDate ??defaultDate??secondDate; // 如果createDate 为空,则对defaultDate求值,如果defaultDate不为空,则将defaultDate赋值给createDate 。否则继续计算secondDate,是不是null都赋值给createDate ,因为是最后一个表达式

11、::

这个东东比较少见,你可以叫它双冒号运算符,这个在给命名空间起别名的时候能用到

在此示例中,命名空间 System 用于包括类 TestClass,因此必须使用 global::System.Console 来引用 System.Console 类,该类被 System 命名空间隐藏。 而且,别名 colAlias 用于引用命名空间 System.Collections;因此,将使用此别名而不是命名空间来创建 System.Collections.Hashtable 的实例。

using colAlias = System.Collections;
namespace System
{
class TestClass
{
static void Main()
{
// Searching the alias:
colAlias::Hashtable test = new colAlias::Hashtable(); // Add items to the table.
test.Add("A", "1");
test.Add("B", "2");
test.Add("C", "3"); foreach (string name in test.Keys)
{
// Searching the global namespace:
global::System.Console.WriteLine(name + " " + test[name]);
}
}
}
}

12、=>

Lambda表达式的运算符是=>,运算符左边列举出了需要的参数,右边定义了赋予Lambda变量的方法的实现代码

List<User> user = new List<User>{ new User{Id=1,Name="LiSi",Age=22},  new User{Id=2,Name="ZhangSan",Age=25} };
//获取特定人时所用的过滤条件,p参数属于User类型
var results = user.Where(p => p.Name == "LiSi").ToList(); //用User对象的Age值计算平均年龄
var average = user.Average(p => p.Age);

13、ref

 ref 关键字使参数按引用传递,也就是说它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字,而且传递到 ref 参数的参数必须最先初始化,例如:

class RefExample
{
static void Method(ref int i)
{
i = 44;
}
static void Main()
{
int val = 0;
Method(ref val); // val is now 44
}
}

14、out

out是传出参数,与ref有点像,但偏重于输出,而且不用初始化,通过执行使用out参数的方法逻辑,out后面的数接受并返回这个值,比如你写一个方法返回dataset,同时你还想返回页数,怎么办?方法一般不能返回多个值啊,这个时候out就可以返回多个值,是不是很爽,你需要多个值得时候别忘了out这厮啊

public DataSet getData(out int count)
{
dataset ds=bll.getdata(10,20);
获取第11条到第20条数据,但是不可能只显示共有10条记录吧,那么我们就可以用out了
int rcount=bll.GetCount();//比方说这个是取总记录数的
count=rcount; return ds;
} //显示的时候 public void showdata()
{
int count=0; gridview1.datasource=getData(out count);
gridview1.databind();
label1.text="共有"+count.tostring()+"条记录";
}

15、params

params主要的用处是在给函数传参数的时候用,就是当函数的参数不固定的时候。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字!

注意事项:

(1)若形参表中含一个参数数组,则该参数数组必须位于形参列表的最后;

(2)参数数组必须是一维数组;

(3)不允许将params修饰符与ref和out修饰符组合起来使用;

(4)与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量;

(5)若实参是数组则按引用传递,若实参是变量或表达式则按值传递。

(6)用法:可变的方法参数,也称数组型参数,适合于方法的参数个数不知的情况,用于传递大量的数组集合参数;当使用数组参数时,可通过使用params关键字在形参表中指定多种方法参数,并在方法的参数表中指定一个数组,形式为:方法修饰符 返回类型 方法名(params 类型[] 变量名)

如带有参数的SQL 语句,不同的表的字段数量也不同,当你更新修改的时候就可以用params

16、using

这个再也熟悉不过了,常见三种用法

(1)引用命名空间,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

(2)创建别名(类或者命名空间的别名)

using MyControle=System.Console;
class UsingEx
{
public static void Main()
{
MyConsole.WriteLine("应用了类的别名");
}
}

(3)自动清理资源

using (SqlConnection conn = new SqlConnection(_connstr))
//这样你就不用手工清理连接资源了

17、this

(1)表示当前实例

(2)索引器关键字

(3)隐藏父类同名方法的关键字

(4)扩展方法的关键字

也没什么难的,多用用就会了

那些年我们追过的奇葩关键字远不止这些,真是浪花一朵朵,我也只是想到了这些,真碰到没见过的,查查也就知道了,没必要纠结,想必看完了这篇大家依然很忐忑,其实也不是坏事,呵呵,说明咱们的求知欲很强烈啊,我也只能说继续忐忑,继续加油,最后依然忐忑,因为你在忐别的忑啊~

 
 
标签: C#关键字

C#奇葩关键字的更多相关文章

  1. 那些年我们追过的C#奇葩关键字——忐忑[转载]

    原文地址:http://www.cnblogs.com/WeiGe/p/3315807.html 免责申明:本文为转载,如果伤及原作者利益,请与本博主邮箱313887852@qq.com联系并注明事宜 ...

  2. 那些年我们追过的C#奇葩关键字——忐忑

    说到中国的歌坛,不能光说张学友这种大咖吧,我看那些怪咖更给力,比如我们的龚琳娜童鞋,一首神曲<忐忑>唱的那叫不可收拾,而且听到的改编版本更多,每一次都是心怀忐忑,就像C#里的那些关键字 说 ...

  3. 精选傻X错误 && 自己的套路

    声明 参考课件由Accelerator汇编 1. 随手注意的细节 你写的main 真的是 main 么? 在无向图或者网络流找反向边的时候,编号 \(xor 1\) 的前提是,你的第一条边编号是 2或 ...

  4. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

  5. JavaScript数组的一些奇葩行为

    今天,复习了一下JavaScript的数组,然后,把他的一些奇葩行为总结了一下,在这里和大家share一下,如果有不对的地方,欢迎指出! 奇葩1:Array()构造器函数可以不使用new关键字进行调用 ...

  6. Java_慎用方法级别的synchronized关键字

    为什么要这么说呢, 因为笔者被这个坑过(其实是自己坑自己)╮(╯_╰)╭ 先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代 ...

  7. C核心 那些个关键字

    概述 - C语言老了 目前而言(2017年5月12日) C语言中有 32 + 5 + 7 = 44 个关键字. 具体如下 O(∩_∩)O哈哈~ -> C89关键字 char short int ...

  8. c3p0数据库连接池无法连接数据库—错误使用了username关键字

    一.问题描述 上篇博客说到了关于maven无法下载依赖jar包的问题,这篇博客再说一下关于在本个项目中遇到的关于使用C3P0连接池连接数据库的问题,真心很奇葩,在此,也请大家引起注意.首先看我的项目基 ...

  9. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

随机推荐

  1. 【Stackoverflow好问题】java在,如何推断阵列Array是否包括指定的值

    问题 java中,怎样推断数组Array是否包括指定的值 精华回答 1. Arrays.asList(...).contains(...) 2. 使用 Apache Commons Lang包中的Ar ...

  2. [ Alcatraz ]管理Xcode插件

    [ Alcatraz 配置 ] 1.包管理器在线安装 Terminal终端 $ curl -fsSL https://raw.githubusercontent.com/supermarin/Alca ...

  3. 解决tomcat占用8080端口

    怎么解决tomcat占用8080端口问题图文教程           怎么解决tomcat占用8080端口问题 相信很多朋友都遇到过这样的问题吧,tomcat死机了,重启eclipse之后,发现 Se ...

  4. Fluent Validation + NInject3 + MVC5

    Fluent Validation + NInject + MVC - Why & How : Part 1 http://fluentvalidation.codeplex.com/ htt ...

  5. 怎样将IPhone应用程序软件公布到应用程序商店?

    转自:http://www.shtion.com/667.html 怎样将IPhone应用程序软件公布到应用程序商店? 2009年10月19日公布 分类: App store, iphone, 手机应 ...

  6. Redis 中文入库成功,读取数据写入文件乱码问题

    近期须要用到redis ,可是在编码这个问题上,纠结了非常久.        需求 :每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果.使 ...

  7. PHP激活用户注册验证邮箱

    本文将结合实例介绍如何使用PHP+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 注册邮箱激活流程 <ul class='ul_demo''> <li ...

  8. PHP Socket编程 之使用fsockopen()函数

    Socket可以理解为两台计算机相互通信的通道. 用法:使用fsockopen()函数 具体用法详见上篇文章.函数的参数为URL.端口号.一个存放错误编号的变量.一个存放错误信息字符串的变量和超时等待 ...

  9. 设计模式之职责链模式(Chain of Responsibility)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  10. ArrayList/List 泛型集合

    List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...