C#sharp 必须扩展的知识点

1)async / await

使用async / await-pattern允许在执行阻塞操作时解除UI /当前线程的阻塞。async / await-pattern的工作原理是让代码继续执行,即使在某些东西阻塞了执行(如Web请求)的情况下。

有关async / await-pattern的信息,请访问:https://msdn.microsoft.com/en-us/library/hh191443.aspx

2)对象/数组/集合初始化器

通过使用对象、数组和集合初始化器,可以轻松地创建类、数组和集合的实例:

//一些演示类
public class Employee {public string Name {get; set;}public DateTime StartDate {get; set;}
}

//使用初始化器创建employee 
Employee emp = new Employee {Name=”John Smith”, StartDate=DateTime.Now()}; 
上面的例子在单元测试中才真正有用,但在其他上下文中应该避免,因为类的实例应该使用构造函数创建。

有关初始化器的信息,请访问:https://msdn.microsoft.com/en-us/library/bb384062.aspx

3)Lambdas,谓词,delegates和闭包

在许多情况下(例如使用Linq时),这些功能实际上是必需的,确保学习何时以及如何使用它们。

关于Lambdas,谓词,delegates和闭包的信息,请访问:http://www.codeaddiction.net/articles/13/lambda-expressions-delegates-predicates-and-closures-in-c

4)??(空合并运算符)

?? – 运算符返回左侧,只要它不为null;那样的情况下返回 
//可能为null var someValue = service.GetValue(); var defaultValue = 23

//如果someValue为null,结果将为23 var result = someValue ?? defaultValue; ?? – 运算符可以链接: 
ing anybody = parm1 ?? localDefault ?? globalDefault; 
并且它可以用于将可空类型转换为不可空:

var totalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0); 
有关?? – 运算符的信息,请访问:https://msdn.microsoft.com/en-us/library/ms173224.aspx

5)$“{x}”(字符串插值) ——C#6

这是C#6的一个新功能,可以让你用高效和优雅的方式组装字符串:

//旧方法 var someString = String.Format(“Some data: {0}, some more data: 
{1}”, someVariable, someOtherVariable);

//新方法 var someString = $”Some data: {someVariable}, some more data: 
{someOtherVariable}”;

你可以把C#表达式放在花括号之间,这使得此字符串插值非常强大。

6)?.(Null条件运算符) ——C#6

null条件运算符的工作方式如下:

//Null if customer or customer.profile or customer.profile.age is null 
var currentAge = customer?.profile?.age; 没有更多NullReferenceExceptions!

有关?.-运算符的信息,请访问:https://msdn.microsoft.com/en-us/library/dn986595.aspx

7)nameof Expression ——C#6

新出来的nameof-expression可能看起来不重要,但它真的有它的价值。当使用自动重构因子工具(如ReSharper)时,你有时需要通过名称引用方法参数:

public void PrintUserName(User currentUser) { 
//The refactoring tool might miss the textual reference to current user 
below if we’re renaming it 
if(currentUser == null) 
_logger.Error(“Argument currentUser is not provided”);

//... } 你应该这样使用它…
  • 1

public void PrintUserName(User currentUser) { 
//The refactoring tool will not miss this… 
if(currentUser == null) 
_logger.Error($”Argument {nameof(currentUser)} is not provided”);

//... }
  • 1

有关nameof-expression的信息,请访问:https://msdn.microsoft.com/en-us/library/dn986596.aspx

8)属性初始化器 ——C#6

属性初始化器允许你声明属性的初始值:

public class User { 
public Guid Id { get; } = Guid.NewGuid(); 
// … }

使用属性初始化器的一个好处是你不能声明一个集合:嗯,因此使得属性不可变。属性初始化器与C#6主要构造函数语法一起工作。

9)as和is 运算符

is 运算符用于控制实例是否是特定类型,例如,如果你想看看是否可能转换:

if (Person is Adult) { 
}

使用as运算符尝试将实例转换为类。如果不能转换,它将返回null:

SomeType y = x as SomeType; if (y != null) { 
//do stuff 
}

10)yield 关键字

yield 关键字允许提供带有条目的IEnumerable接口。 以下示例将返回每个2的幂,幂指数从2到8(例如,2,4,8,16,32,64,128,256):

public static IEnumerable Power(int number, int exponent) { 
int result = 1; 
for (int i = 0; i < exponent; i++) 

result = result * number; 
yield return result; 
} }

yield返回可以非常强大,如果它用于正确方式的话。 它使你能够懒惰地生成一系列对象,即,系统不必枚举整个集合——它就会按需完成。

11.??    ?:    ?.    ? 参考另一篇博文


> 译文链接:http://www.codeceo.com/article/10-features-csharp-need-learn.html
> 英文原文:10 features in C# that you really should learn (and use!)
> 翻译作者:码农网 – 小峰 [ 转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python学习】 - PIL - 各种图像操作

官方文档&#xff1a;http://effbot.org/imagingbook/image.htm 1.打开图像并显示&#xff08;注意这样show的话&#xff0c;会生成本地文件的&#xff09;&#xff1a; imgImage.open(1.jpg)img.show() 2.转8位灰度图 greyimgimg.convert(L) greyimg.show() 3.获取图片某一像…

SharePoint REST API - 确定REST端点URL

SharePoint REST端点URI的结构 在你能够通过REST访问SharePoint资源之前&#xff0c;首先你要做的就是找出对应的URI端点&#xff0c;如果你对Client API熟悉&#xff0c;有些时候也可以参考Client API去猜测构建&#xff0c;例如。 客户端对象模型的方法&#xff1a; List.G…

【机器学习】 - 各种人脸数据集下载地址及说明汇总

1. Olivetti Faces人脸数据集 由40个人组成&#xff0c;共计400张人脸&#xff1b; 每人的人脸图片为10张&#xff0c;包含正脸、侧脸以及不同的表情&#xff1b; 整个数据集就是一张大的人脸组合图片&#xff0c;下载地址&#xff1a;https://cs.nyu.edu/~roweis/data/olivet…

【机器学习】 - 激活函数与交叉熵Sigmoid, Softmax, binary_crossentropy, categorican_crossentropy区别

Content: 为什么需要激活函数&#xff1b;一个神经元在做什么&#xff1b;激活函数 SigmoidSoftmax 4. 交叉熵损失函数 Binary cross-entropyCategorican cross-entropy为什么需要激活函数&#xff1a; Ans: 为了引入非线性变换。 如下图所示的红线和蓝线&#xff0c;在这个…

SharePoint 2013 Farm 安装指南——Least Privilege

写过很多关于SharePoint 2013 安装&#xff0c;这是第四篇。可能你会觉得为什么如此简单的安装至于花那么多精力去折腾吗。我的答案是肯定的。知识的积累不是一蹴而就的&#xff0c;而是循序渐进的去学习&#xff0c;每一个阶段都有独立的思考&#xff0c;于是乎第四篇SharePoi…

【机器学习】 - 关于Keras的深入理解

1.keras中使用相同的loss与metrics&#xff0c;都指定为mse&#xff0c;为什么训练时每轮完成后它们数值不一样&#xff1f; 答&#xff1a; 此时的loss是指完成最后一个batch后得到的这轮epoch的loss的加权平均&#xff0c;权重就是每个batch的样本数&#xff0c;&#xff08…

SharePoint 2013 本地开发解决方案以及远程调试

https://www.cnblogs.com/jianyus/p/3523387.html 在SharePoint开发中&#xff0c;我们需要在部署有SharePoint环境的服务器中开发&#xff0c;这是一件让人很苦恼的事情&#xff0c;毕竟不能一个项目多人开发配备多台服务器&#xff0c;这就需要本地开发。 本来自己以为ShareP…

visual studio 2015 key vs2015密钥

Visual Studio Professional 2015简体中文版&#xff08;专业版&#xff09; KEY&#xff1a;HMGNV-WCYXV-X7G9W-YCX63-B98R2 Visual Studio Enterprise 2015中英版&#xff08;企业版&#xff09; KEY&#xff1a;HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

【机器学习】 - keras学习 - 图片生成器ImageDataGenerator

函数原型&#xff1a; keras.preprocessing.image.ImageDataGenerator(featurewise_centerFalse,samplewise_centerFalse,featurewise_std_normalizationFalse,samplewise_std_normalizationFalse,zca_whiteningFalse,zca_epsilon1e-6,rotation_range0.,width_shift_range0.,h…

SharePoint 2007 and 2010 的服务器场的端口

由于要把一台SharePoint Server放到外网去,就把IP改到DMZ区了,结果除了系统管理员,其他帐号都无法验证通过,肯定是一些端口没开. 网上一查,SharePoint所需要的端口还真多,不过Client和WFE之间的应该开放80和443就OK了,其余的都是SharePoint Server之间,或者和 公司网络环境的…

【Python学习】 - 使用Anaconda的Spyder查看某些函数的原型的6种方法汇总

1.Ctrl鼠标点击函数名&#xff08;对应的函数名会加下划线&#xff09; 或 Ctrlg 2.help(function) 在某些情况下方法1失效&#xff0c;比如TensorFlow中的一些函数tf.constant&#xff0c;他只会跳转到一个init文件&#xff0c;并不会展示函数原型。 所以可以这样help(tf.co…

SharePoint2013 备份还原

你执行的是导出导入操作&#xff0c;用powershell命令吧&#xff0c;backup-spsite&#xff0c;restore-spsite&#xff0c;备份还原和导入导出是不一样的。 备份还原和导入导出的区别&#xff1a; 1、 还原是完全的覆盖操作&#xff0c;就是还原的网站和之前的网站完全一样&a…

【Python学习】 - TensorFlow.keras 不显示epochs进度条的方法

一、概述 在我们使用TensorFlow进行神经网络的搭建时&#xff0c;难免遇到需要训练很多次来拟合数据的情况&#xff0c;假设需要拟合1000次数据&#xff0c;那么可能前800次的拟合效果都不是很好&#xff0c;所以显示进度条就会使得输出面板被填满&#xff0c;输出的信息我们并…

【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总

1.np.flatten() 和 np.ravel() 两者的功能是一致的&#xff0c;将多维数组降为一维&#xff0c;但是两者的区别是返回拷贝还是返回视图。 np.flatten()返回一份拷贝&#xff0c;对拷贝所做修改不会影响原始矩阵&#xff0c;而np.ravel()返回的是视图&#xff0c;修改时会影响…

SharePoint2010开发最佳实践

目 录 第1章 SharePoint Foundation开发基础1 1.1 SharePoint能做什么1 1.2 SharePoint Foundation和SharePoint Server 2010的区别2 1.3 SharePoint Foundation新特性4 1.4 SharePoint 2010基础概念4 1.4.1 服务器场5 1.4.2 Web应用程序6 1.4.3 服务应用程序8 1.4.4 网站集和网…

关于报错:'nvidia-smi' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

使用cmd查看电脑显卡的信息&#xff0c;调用nvidia-smi查看显卡使用情况报错如下&#xff1a; 因为它找不到该命令。这个文件是一个exe文件&#xff0c;一般都在下面这个文件夹中。 C:\Program Files\NVIDIA Corporation\NVSMI 所以想要使用该命令必须要能得到这个文件夹&…

SharePoint网站集备份与恢复

下面是操作过程&#xff1a;尝试三是成功的 尝试一&#xff1a;移动网站集&#xff08;无效&#xff09; 向Web应用程序新增了一个数据库&#xff0c;把网站集迁移到新数据库里&#xff1b; Get-SPSite -ContentDatabase <SourceContentDb> | Move-SPSite -Destination…

【机器学习】 - 使用dlib进行人脸定位,人脸检测,给人脸图片戴口罩

detector dlib.get_frontal_face_detector() 功能&#xff1a;人脸检测画框 参数&#xff1a;无 返回值&#xff1a;默认的人脸检测器 faces detector(img_gray, 0) 功能&#xff1a;对图像画人脸框 参数&#xff1a;img_gray&#xff1a;输入的图片 返回值&#xff1a;人脸…

Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sharepoint的重要组成&#xff0c;可以说Sharepoint的许多网站功能都是基于这些服务构架起来的。这里把Sharepoint服务的相关要点总结一下。 1、…

【机器学习】 - import cv2 opencv安装python

果然不出我所料&#xff0c;直接pip就出了很多奇奇怪怪的错误&#xff0c;还是用清华镜像吧 输入&#xff1a;pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 安装完后&#xff0c;重启spyder即可使用。 下载方法2&#xff1a; 下载地址&#xff1a…