Jan*_*Jan 3 c# nullable c#-7.1
从C#7.1开始,default无需指定类型就可以通过使用获得默认值。我今天尝试了一下,发现可为空的结构和可为空的值类型的结果有些违反直觉。
[TestFixture]
public class Test
{
private class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
[Test]
public void ShouldBehaveAsExpected()
{
var person1 = new Person {Name = "John", Age = 58};
var person2 = new Person {Name = "Tina", Age = 27};
var persons = new[] {person1, person2};
int? myAge = persons.FirstOrDefault(p => p.Name == "MyName")?.Age;
var myDefaultAge = myAge ?? default;
var myAgeString = myAge == null ? "null" : myAge.ToString();
var myDefaultAgeString = myDefaultAge == null ? "null" : myDefaultAge.ToString();
Console.WriteLine("myAge: " + myAgeString); // "myAge: null"
Console.WriteLine("myDefaultAge: " + myDefaultAgeString); // "myDefaultAge: 0"
}
}
Run Code Online (Sandbox Code Playgroud)
我本来期望myDefaultAge是null不是0,因为myAge的类型是int?和default(int?)是null。
是否在任何地方指定了此行为?的C#编程指南只说“的默认文字产生相同的值作为等效默认(T),其中T为推断出的类型。”
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |