`
lindexi-gd
  • 浏览: 140218 次
社区版块
存档分类
最新评论

C# 7.0

 
阅读更多

下面说的C# 7.0功能将在未来发布,首先需要安装Visual Studio 15 Preview 4,听说这个版本安装很快。

C# 7.0的功能主要是数据处理,让代码更简洁,让代码性能更高

让代码简单这个我觉得不如6.0,性能是Iot,C#速度差,垃圾wr就让C#可以访问内存直接,这个下面没有说

比较大修改是可以使用Tuples 来多个返回,其实是抄袭了某脚本

多返回这个在之前也有做,他这样就是小改。

修改大的有Case 可以判断类型,其实这个使用是我们有类 a,类b、c继承a,这时有用

如果觉得这个和我一样觉得没用,可以去Visual studio 按反馈喷

如果好奇他是怎么弄,可以查看https://github.com/dotnet/roslyn

out 返回值定义

我们以前要使用out 总是需要在外面定义我们变量。


  public void PrintCoordinates(Point p)

  {

    int x, y; // 在外面定义

    p.GetCoordinates(out x, out y);

    WriteLine($"({x}, {y})");

  }

在7.0我们可以使用在out定义我们变量,这样看起来不是在一个区域,但是可以减少我的代码


public void PrintCoordinates(Point p)

{

    p.GetCoordinates(out int x, out int y);

    WriteLine($"({x}, {y})");

}

在out定义类型,定义可以用var

看到这我才说这样有用,如果我们开始没有确定我们返回的是什么,然后直接定义,需要修改地方多,但是如果我们使用Var就可以让我们定义修改少,一般在写就需要先想我们需要用什么,不要总是改

如果我们使用一个返回为bool,那么可以在{使用out的值


public void PrintStars(string s)

{

    //转换,可以是数字,显示

    if (int.TryParse(s, out var i)) { WriteLine(new string('*', i)); }

    else { WriteLine("Cloudy - no stars tonight!"); }

}

如果有返回值我们不需要,可以out *,这样我们就不用知道这个返回值,原先不需要使用我还要想一个变量,然后vs说我这个没有使用,现在我们直接就不给他名

在我们下面有返回多个,这时不需要的可以用*

模式匹配

C# 7.0可以使用is一部分代替as

我们需要判断一个值是否是一个类型,如果是那么赋值

o is int i

那么我们就可以直接使用i

在我们一个判断,如果我们存在了object o是int,那么我们就使用int i=(int)o;

如果我们object不是int,那么转换object o是string,string s=(string)o;

int.TryParse(s,out i);

我们可以简化,判断是不是int,如果是给i,这时就返回true

然后判断是不是string,是就转,成功使用i

if (o is int i || (o is string s && int.TryParse(s, out i)) { /* use i */ }

我们在Case可以选择类型


switch(shape)

{

    case Circle c:

        WriteLine($"circle with radius {c.Radius}");

        break;

    case Rectangle s when (s.Length == s.Height):

        WriteLine($"{s.Length} x {s.Height} square");

        break;

    case Rectangle r:

        WriteLine($"{r.Length} x {r.Height} rectangle");

        break;

    default:

        WriteLine("<unknown shape>");

        break;

    case null:

        throw new ArgumentNullException(nameof(shape));

}

case顺序很重要,default在后面,即使他后面有语句

Tuples

以前我们需要返回多个有点难,可以使用out参数,可以Tuples


(string, string, string) LookupName(long id) // tuple return type

{

    ... // 返回多个数据,我们在数据拿到多个数据

    return (first, middle, last); // tuple literal

}

var names = LookupName(id);

我们这样用第一返回值:names.Item1和原来几乎不改,这样对于返回值不好,因为我们难以去记

我们要给他一个好记的

(string first, string middle, string last) LookupName(long id)

我们使用第一个names.first,这样使用就不会难,可以使用我们需要的名字

返回可以使用return (first, middle, last);,如果定义了名称,可以使用

return last:last,first:first

我们可以使用多个var来返回

(string first, string middle, string last) = LookupName(id1);

第一个first就是返回的第一个,我们可以使用var ,因为我们不需要定义类型(var fist,var midd)=Lookup(id);

如果我们有多个var,那么我们可以简单var (first, middle, last) = LookupName(id1);

我们不关系第二个返回值,可以使用(var first,*)=Lookup(id);

本地函数

我们可以在函数里面定义函数,这是本地

这个在很多垃圾语言都有


public int Fibonacci(int x)

{

    if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));

    return Fib(x).current;

//下面本地函数

    (int current, int previous) Fib(int i)

    {

        if (i == 0) return (1, 0);

        var (p, pp) = Fib(i - 1);

        return (p + pp, p);

    }

}

改进常量

我们有比较长数字,那么我们在定义需要比较难知道他是否写对

我们可以使用,下划线,这样是分割,可以数我们写了多少数字,可以看我们是不是写错


var d = 123_456;

var x = 0xAB_CD_EF;

我们还可以定义2进制,原来是无法定义

var b = 0b1010_1011_1100_1101_1110_1111;

这个主要在二进制好,原先的使用true和false,如果还要使用,是用byte转换,如果Iot,我们需要定义二进制,要是使用原的还是难,我就觉得这个功能好。可以分割,我们二进制容易打着就不对,有了分割可以看出没几个,这样看代码简单,这个功能应该是原先就可得到,现在使用_觉得还是没有用。

ref returns 返回值

我们返回的是引用,现在返回可以是值,我们返回数组中的一个值,那么修改这个值,因为放进引用,我们输出数组是修改的值


public ref int Find(int number, int[] numbers)

{

    for (int i = 0; i < numbers.Length; i++)

    {

        if (numbers[i] == number) 

        {

            return ref numbers[i]; // return the storage location, not the value

        }

    }

    throw new IndexOutOfRangeException($"{nameof(number)} not found");

}

int[] array = { 1, 15, -39, 0, 7, 14, -12 };

ref int place = ref Find(7, array); 

place = 9; // 修改

WriteLine(array[4]); // 9

https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    C# 7.0 in A Nutshell

    When you have questions about C# 7.0 or the .NET CLR and its core Framework assemblies, this bestselling guide has the answers you need. Since its debut in 2000, C# has become a language of unusual ...

    c#7.0本质论带图片完整版

    《C# 7.0 本质论》是一本深入探讨C#编程语言核心概念和技术的书籍,高清彩色扫描版提供了良好的阅读体验。该版本包含了完整的图文内容,旨在帮助读者全面理解C# 7.0的新特性和编程理念。C#是微软开发的一种面向对象...

    C#7.0本质论_EssentialCSharp-7.0 源码 - 2020新版.zip.zip

    《C# 7.0 本质论》是针对C#编程语言的一本深入解析书籍,尤其对于想要深入了解C# 7.0新特性的开发者来说,这是一个宝贵的资源。该资源包含源码,使得读者能够结合理论与实践,更好地理解C# 7.0的核心概念。 C#是...

    C# 7.0 Pocket Reference: Instant Help for C# 7.0 Programmers

    C# 7.0 Pocket Reference: Instant Help for C# 7.0 Programmers English | 2017 | ISBN-10: 1491988533 | 234 pages | PDF + EPUB + MOBI(conv) | 2 Mb When you need answers for programming with C# 7.0, this ...

    Essential C# 7.0 Sixth Edition

    《Essential C# 7.0 Sixth Edition》是C#编程语言的一本入门书籍,尤其适合已有一定编程基础的学习者。这本书深入浅出地介绍了C# 7.0的最新特性和最佳实践,旨在帮助读者快速掌握这个强大的.NET编程语言。 C#(发音...

    C# 5.0 权威指南(中文高清带书签)+最新C# 7.0

    《C# 5.0 权威指南》与《C# 7.0》是两本深入探讨C#编程语言的权威书籍,旨在为开发者提供全面且深入的C#知识。C#是一种由微软开发的面向对象的编程语言,广泛应用于Windows桌面应用、Web应用、游戏开发以及移动应用...

    C# 7.0 in a Nutshell: The Definitive Reference -epub

    When you have questions about C# 7.0 or the .NET CLR and its core Framework assemblies, this bestselling guide has the answers you need. Since its debut in 2000, C# has become a language of unusual ...

    Essential C# 7.0, 6th Edition [epub]

    Essential C# 7.0 is a well-organized, no-fluff guide to C# 7.0 for programmers at all levels of experience. Reflecting C# 7.0 features and modern programming patterns, it will help you write code that...

    C# 7.0 Pocket Reference(Early Release) epub

    C# 7.0 Pocket Reference(Early Release) 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    C# 7.0 in a Nutshell The Definitive Reference azw3

    C# 7.0 in a Nutshell The Definitive Reference 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    C# 7.0 in a Nutshell The Definitive Reference epub

    C# 7.0 in a Nutshell The Definitive Reference 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    C# 7.0 in a Nutshell果壳C#.zip

    《C# 7.0 in a Nutshell》是一本深入探讨C#编程语言的权威著作,专注于C# 7.0版本的新特性和变化。这本书由著名的技术作家Bert Bos和Albahari兄弟共同撰写,旨在帮助开发者全面理解C# 7.0的关键概念和实践技巧。 C#...

    C# 5.0 7.0 in a Nutshell EN

    《C# 5.0 7.0 in a Nutshell》是两本关于C#编程语言的权威指南,其中涵盖了从C# 5.0到7.0版本的重要更新和特性。C#作为Microsoft开发的一种面向对象的编程语言,自发布以来一直在不断演进,以适应现代软件开发的需求...

    Essential C# 7.0, 6th Edition

    Essential C# 7.0, 6th Edition,epub版本,英文 The Comprehensive, Expert Guide to C# Language Programming. Essential C# 7.0 is a well-organized, no-fluff guide to C# 7.0 for programmers at all levels of...

    Essential C# 7.0 根据EPUB导出后自行编辑

    其他在CSDN的本书PDF版都需要积分。我从其他地方下载了本书英文版的EPUB版本,解压后再Word中重新编辑,而后生成PDF文件,为了我的数日辛苦,资源分数定为5分。本文件可以直接打印。原书封面上有“ROUGH CUTS”字样...

    C#7.0的新特性

    ### C#7.0的新特性详解 #### 一、引言 C#7.0作为.NET框架中的一个重要更新,带来了诸多新特性与改进,旨在提高编程效率与代码可读性。这一版本着重于数据消费、代码简化以及性能优化。本文将详细介绍C#7.0中的几项...

    EssentialCSharp-7.0.zip

    《C# 7.0 本质论》是一个深入探讨C#编程语言最新版本——C# 7.0的综合资源。这个压缩包“EssentialCSharp-7.0.zip”包含了一系列关于C# 7.0核心概念、新特性和实践技巧的详细资料。以下是对C# 7.0中一些重要知识点的...

    C# 7.0 Pocket Reference 无水印pdf

    C# 7.0 Pocket Reference 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或...

    C# 7.0 All-in-One For Dummies的例子源码

    《C# 7.0 All-in-One For Dummies》是一本专为初学者和有一定基础的程序员设计的C#编程指南。这本书全面涵盖了C# 7.0版本的各种新特性和经典概念,旨在帮助读者深入理解和掌握这门强大的编程语言。源码文件...

Global site tag (gtag.js) - Google Analytics