那些年我们追过的C#奇葩关键字——忐忑
说到中国的歌坛,不能光说张学友这种大咖吧,我看那些怪咖更给力,比如我们的龚琳娜童鞋,一首神曲《忐忑》唱的那叫不可收拾,而且听到的改编版本更多,每一次都是心怀忐忑,就像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 = ;
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 =,b=;
short myShort = checked((short)(a+b));
//error
7、unchecked
忽略溢出关键字,接受结果而不管溢出情况,默认是不检查溢出的
short a =,b=;
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", "");
test.Add("B", "");
test.Add("C", ""); 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=,Name="LiSi",Age=}, new User{Id=,Name="ZhangSan",Age=} };
//获取特定人时所用的过滤条件,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 = ;
}
static void Main()
{
int val = ;
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(,);
获取第11条到第20条数据,但是不可能只显示共有10条记录吧,那么我们就可以用out了
int rcount=bll.GetCount();//比方说这个是取总记录数的
count=rcount; return ds;
} //显示的时候 public void showdata()
{
int count=; 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#奇葩关键字——忐忑[转载]
原文地址:http://www.cnblogs.com/WeiGe/p/3315807.html 免责申明:本文为转载,如果伤及原作者利益,请与本博主邮箱313887852@qq.com联系并注明事宜 ...
- C#奇葩关键字
C#奇葩关键字——忐忑 那就认识认识吧,可是又太多,所以也只能是想到哪里是哪里,我们这就让思绪自由飞翔一会吧! 1.@ 这个东东看似和邮件有关啊,但是在C#的世界里,可跟邮件没有一毛钱关系,它是str ...
- 告别Flash——那些年我们追过的FusionCharts
随着FusionCharts最终放弃Flash这块蛋糕,不.或者已经不能叫做蛋糕了,现在Flash图表控件就只剩下AnyChart这一个独苗了,到底Flash还能走多远?这是Flash的末路吗? 众说 ...
- 那些年我们追过的SQL
SQL是大学必修课程之一二维表结构,看着就是一种美感. 针对近期感情,聊一聊,在平时容易犯的一个错误,看看你是不是中枪了. 我们还是选用传统的student表(请不要考虑表的结构是否合理)ID ...
- RecyclerView,CardView导入和使用(Demo)
简介: 这篇文章是ANDROID L——Material Design详解(UI控件)的一个补充或者说是应用实例,如果有时间建议大家稍微浏览一下上篇文章. 本文主要介绍Android L新增加的两个U ...
- ANDROID L——Material Design综合应用(Demo)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Material Design: Material Design是Google推出的一个全 ...
- .NET Core微服务之基于Consul实现服务治理
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发 ...
- Consul实现服务治理
.NET Core微服务之基于Consul实现服务治理 https://www.cnblogs.com/edisonchou/p/9124985.html 一.Consul基础介绍 Consul是Ha ...
- ANDROID L——RecyclerView,CardView进口和使用(Demo)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 这篇文章是ANDROID L--Material Design具体解释(UI控 ...
随机推荐
- MVC与EF结合:Contoso大学
中文教程 1.通过 MVC 5 使用 Entity Framework 6 Code First 入门 https://docs.microsoft.com/zh-cn/aspnet/mvc/over ...
- Vim 编辑器及其基本操作
实验楼某些课程有用 Vim 编辑器来写代码,因此有了这篇博客,据说是上古神器,当然主要目的是基本操作. Vim 编辑器 Vim(Vi IMprove) 是 Linux 系统上的最著名的文本/代码编辑器 ...
- BZOJ 1588 营业额统计 set
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1588 题目大意: 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交 ...
- 【[JSOI2007]建筑抢修】
各种瞎写 之后也不知道为什么就过了 刚看到这道题感觉确实是不会的,因为我贪心太差了\(QAQ\) 之后就随便\(yy\)呗 发现首先我们得排一下序,以\(t2\)也就是建筑的损坏时间为第一关键字从小到 ...
- Java50道经典习题-程序13 根据条件求数字
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?分析:完全平方数:如果一个数能是由两个相同的数相乘的结果,那么这个数就是完全平方数,例如:9==3*3: ...
- use tool wget for windows download
1.什么是wget Wget是一个在网络上进行下载的简单而强大的自由软件,其本身也是GNU计划的一部分.它的名字是"World Wide Web"和"Get"的 ...
- vue04-动画、组件
一.vue中使用动画 文档:https://cn.vuejs.org/v2/guide/transitions.html 1. Vue 中的过渡动画 <!DOCTYPE html> < ...
- Python 学习笔记(十四)Python类(三)
完善类的内容 示例: #! /usr/bin/env python # coding =utf-8 #通常类名首字母大写 class Person(object): """ ...
- Linux 不杀进程的情况下,如何释放磁盘资源
最近项目组人员反馈一个问题:即磁盘空间满了,但是并没看到有什么文件占用空间: [root@xxxx home]# df -h Filesystem Size Used Avail Use% Mount ...
- Linux系统Java环境配置
1.卸载Linux系统自带的JDK java -version rpm -qa | grep -i java 我们要删除掉自带的JDK环境 rpm -e --nodeps java-1.6.0-ope ...