空合并运算符怎么可能导致错误
本文关键字:错误 怎么可能 合并 运算符 | 更新日期: 2023-09-27 18:36:57
这很奇怪。
这与文章"将OAuth 2.0与Web应用程序一起使用(ASP.NET MVC)"有关:https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc
忽略整个代码,没必要,问题是这样的 - 有一种方法:
public class AppFlowMetadata : FlowMetadata
{
private static string userId;
public override string GetUserId(Controller controller)
{
if (userId == null)
{
userId = Guid.NewGuid().ToString();
}
return userId;
}
}
就像魅力一样工作,永远不会失败。
奇怪的是 - 如果我使用空合并运算符 (??) 而不是 IF 块:
public override string GetUserId(Controller controller)
{
return userId ?? Guid.NewGuid().ToString();
}
它不断失败,引发异常:
Google.Apis.Auth.OAuth2.Responses.TokenResponseException: 错误:"invalid_grant", 描述:"无效代码。", uri:"
老实说,我相信这两个代码必须具有相同的效果。根据MSDN:
?? 运算符称为 null 合并运算符。它返回 如果操作数不为空,则为左操作数;否则返回 右手操作数。
有人可以向我解释一下吗? :)
更新我的坏,确实在第二个代码中没有将新的 Guid 分配给用户 ID。它应该是这样的:
userId = userId ?? Guid.NewGuid().ToString();
return userId;
这两种方法并不相同。
第一个将在每次调用时返回相同的 GUID(只要未在其他位置设置userID
)。
第二个将在每次调用时返回不同的 GUID(除非userID
在其他地方设置为不null
)。