在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
VS2015的预览版在11月12日发布了,下面让我们来看看C#都提供了哪些新的功能。 字符串添写(String interpolation) public class Book { public int Number { get; set; } public string Name { get; set; } public string Abstract { get; set; } public float Price { get; set; } public List<Author> Authors { get; set; } } 使用string.Format的代码如下: var introUsingStringFormat = string.Format("[{0}]' price is {1:F3}, its description is {2}.", book.Name, book.Price, book.Abstract); 使用string interpolation的代码如下: var introUsingStrInterPolation = "[\{book.Name}]' price is \{book.Price : F3}, its description is \{book.Abstract}.";
完整的程序如下: public void Show() { //interpolate string var book = new Book { Abstract = "Book about C#6.0", Name = "C#6.0 new feature", Price = 10.8709f, }; var introUsingStrInterPolation = "[\{book.Name}]' price is \{book.Price : F3}, its description is \{book.Abstract}."; var introUsingStringFormat = string.Format("[{0}]' price is {1:F3}, its description is {2}.", book.Name, book.Price, book.Abstract); Console.WriteLine("format string using string interpolation:"); Console.WriteLine(introUsingStrInterPolation); Console.WriteLine("==============================================================================="); Console.WriteLine("format string using string.Format method:"); Console.WriteLine(introUsingStringFormat); Console.Read(); } 如下图,两种方式的输出是一样的:
总结: String Interpolation语法允许你在字符串里直接插入代码并可以像string.Format 那样指定format Specifier和对齐,如上面的例子\{book.Price : F3}指定price的精度为3。这个语法在之后版本中会变得更加简洁,可能会采用如下的格式: var introUsingStrInterPolation = $"[{book.Name}]' price is {book.Price : F3}, its description is {book.Abstract}."; 空条件运算符? 如下面例子所示, 在程序中经常会出现对表达式中对象是否为空的连续检测。 if (book != null && book.Authors != null) { var countOfAuthers = book.Authors.Count; } 空条件运算符?使得这种检测更加方便,表达更加简洁,其使用方法如下: var countOfAuthersUsingNullConditional = book?.Authors?.Count;
空条件运算符?用在成员运算符.和索引前面,会执行下面的操作: if (book == null) { countOfAuthorsUsingNullConditional = null; } else if (book.Authors == null) { countOfAuthorsUsingNullConditional = null; } else { countOfAuthorsUsingNullConditional = book.Authors.Count; } 上面的code展示了其执行的逻辑顺序,达到相同结果的简洁写法如下: if(book == null || book.Authors == null) { countOfAuthorsUsingNullConditional = null; } else { countOfAuthorsUsingNullConditional = book.Authors.Count; } 从上可以看出其具有如下特性:
此外,空条件运算符还具有如下特点:
下面来看一些针对2和3的例子: //using with coalescing operator ?? int numberOfAuthors = book?.Authors?.Count ?? 0; //using with delegate. action?.Invoke(); 完整的程序如下: public void Show() { //traditional way if (book != null && book.Authors != null) { var countOfAuthors = book.Authors.Count; Console.WriteLine("===================using tranditional way=============="); Console.WriteLine(countOfAuthors); } //the way of using null-conditional operator. var countOfAuthorsUsingNullConditional = book?.Authors?.Count; Console.WriteLine("===================null-conditional operator=============="); Console.WriteLine(countOfAuthorsUsingNullConditional); Console.Read(); //the logic of the expression. if (book == null) { countOfAuthorsUsingNullConditional = null; } else if (book.Authors == null) { countOfAuthorsUsingNullConditional = null; } else { countOfAuthorsUsingNullConditional = book.Authors.Count; } //the concise edition using tranditional way. if (book == null || book.Authors == null) { countOfAuthorsUsingNullConditional = null; } else { countOfAuthorsUsingNullConditional = book.Authors.Count; } //using with coalescing operator ?? int numberOfAuthors = book?.Authors?.Count ?? 0; //using with delegate. action?.Invoke(); }
nameof表达式 有时候我们需要获得代码中某些symbol的名字,例如在throw ArgumentNullException时,需要获得为null参数的名字(字符串形式),在调用PropertyChanged时,我们也需要获得属性的名字,直接使用字符串具有如下的缺点:
nameof表达式能够以字符串的形式返回参数对象或者类成员的名字,下面是一些例子 var nameOfClassPropertyObject = nameof(book); var nameOfArgument = nameof(author); var classMethodMember = nameof(Book.Equals); var classPropertyMember = nameof(Book.Number); var @class = nameof(Book); 从上面的例子中可以看出nameof运算符可以用于类(包括attribute类),类的成员,对象上,另外需要注意的是它只会输出最终元素的名字不会包含其前缀,例如nameof(Book.Equals)的输出是Equals。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论