编写一个字典初始化器的老办法如下
1
2
3
4
5
6
7
8
|
public class DictionaryInitializerBeforeCSharp6
{
public Dictionary<string, string> _users = new Dictionary<string, string>()
{
{"users", "Venkat Baggu Blog" },
{"Features", "Whats new in C# 6" }
};
}
|
我们可以像数组里使用方括号的方式那样定义一个字典初始化器
1
2
3
4
5
6
7
8
|
public class DictionaryInitializerInCSharp6
{
public Dictionary<string, string> _users { get; } = new Dictionary<string, string>()
{
["users"] = "Venkat Baggu Blog",
["Features"] = "Whats new in C# 6"
};
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class DeclarationExpressionsBeforeCShapr6()
{
public static int CheckUserExist(string userId)
{
//Example 1
int id;
if (!int.TryParse(userId, out id))
{
return id;
}
return id;
}
public static string GetUserRole(long userId)
{
////Example 2
var user = _userRepository.Users.FindById(x => x.UserID == userId);
if (user!=null)
{
// work with address ...
return user.City;
}
}
}
|
在 C# 6 中你可以在表达式的中间声明一个本地变量. 使用声明表达式我们还可以在if表达式和各种循环表达式中声明变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class DeclarationExpressionsInCShapr6()
{
public static int CheckUserExist(string userId)
{
if (!int.TryParse(userId, out var id))
{
return id;
}
return 0;
}
public static string GetUserRole(long userId)
{
////Example 2
if ((var user = _userRepository.Users.FindById(x => x.UserID == userId) != null)
{
// work with address ...
return user.City;
}
}
}
|
对于你的静态成员而言,没必要为了调用一个方法而去弄一个对象实例. 你会使用下面的语法
1
2
3
4
5
6
7
|
public class StaticUsingBeforeCSharp6
{
public void TestMethod()
{
Console.WriteLine("Static Using Before C# 6");
}
}
|
在 C# 6 中,你不用类名就能使用 静态成员 . 你可以在命名空间中引入静态类.
如果你看了下面这个实例,就会看到我们将静态的Console类移动到了命名空间中
1
2
3
4
5
6
7
8
9
10
11
|
using System.Console;
namespace newfeatureincsharp6
{
public class StaticUsingInCSharp6
{
public void TestMethod()
{
WriteLine("Static Using Before C# 6");
}
}
}
|
|
|
|
C# 6 之前catch和finally块中是不能用 await 关键词的. 在 C# 6 中,我们终于可以再这两个地方使用await了.
1
2
3
4
5
6
7
8
|
try
{
//Do something
}
catch (Exception)
{
await Logger.Error("exception logging")
}
|
异常过滤器可以让你在catch块执行之前先进行一个 if 条件判断.
看看这个发生了一个异常的示例,现在我们想要先判断里面的Exception是否为null,然后再执行catch块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
//示例 1
try
{
//Some code
}
catch (Exception ex) if (ex.InnerException == null)
{
//Do work
}
//Before C# 6 we write the above code as follows
//示例 1
try
{
//Some code
}
catch (Exception ex)
{
if(ex.InnerException != null)
{
//Do work;
}
}
|
看看这个实例,我们基于UserID是否不为null这个条件判断来提取一个UserRanking.
1
2
3
4
5
6
7
8
9
|
var userRank = "No Rank";
if(UserID != null)
{
userRank = Rank;
}
//or
var userRank = UserID != null ? Rank : "No Rank"
|
1
|
var userRank = UserID?.Rank ?? "No Rank";
|
|