我只是好奇"为什么空传播运算符(或可以)不提供有关类型的任何信息,例如在类型中返回null Nullable<int>?"
由于它返回的null没有类型,因此结果值无法通过扩展方法.
class User {
public string Name { get; set; }
public User Father { get; set; }
}
var user = new User ( );
public static class Extensions {
public static string X (this string p) => "EXTENSION METHOD";
}
Run Code Online (Sandbox Code Playgroud)
C#交互式窗口:
> var user = new User();
> user.Father
null
> user.Father.Name
Object reference not set to an instance of an object.
> user.Father?.Name
null
> user.Father?.Name.X()
null
Run Code Online (Sandbox Code Playgroud)
编辑:
Nullable<string>是一个不可编译的代码.但我不是在修理它.因为这个例子已经回答了这个问题,所以任何机构都可以很容易地解决我所要求的问题.Sco*_*ain 13
问题不在于返回类型,而是事实.如果为null,则根本不处理右侧.
你可以想到
var result = user.Father?.Name.X()
Run Code Online (Sandbox Code Playgroud)
执行为
string result;
var testObject = user.Father;
if(!Object.RefrenceEquals(testObject, null))
{
result = testObject.Name.X();
}
else
{
result = null;
}
Run Code Online (Sandbox Code Playgroud)
因为Father没有超出它的任何东西被执行.
如果你向它添加一个parentisis来强制.?使用扩展方法的结果它可以正常工作
var result = (user.Father?.Name).X()
Run Code Online (Sandbox Code Playgroud)
执行为
string tempResult;
var testObject = user.Father;
if(!Object.RefrenceEquals(testObject, null))
{
tempResult = testObject.Name;
}
else
{
tempResult = null;
}
var result = tempResult.X();
Run Code Online (Sandbox Code Playgroud)