簡體   English   中英

JetBrains Rider中的自定義null斷言

[英]Custom null assertion in JetBrains Rider

我有一個自定義擴展方法來檢查Guid? 值:

public static bool IsNullOrDefault(this Guid? guid)
{
    return !guid.HasValue || guid.value == Guid.Empty;
}

當我在代碼中使用該方法時,我希望Rider會在可能的System.InvalidOperationException斷言中考慮此方法。 但事實並非如此。

public void Foo(Guid? guid)
{
    if (guid.IsNullOrDefault())
    {
        throw new Exception();
    }

    var x = guid.Value;
            ^ There is still a yellow squiggle here, saying Possible System.InvalidOperationException
    ...
}

我嘗試通過覆蓋自定義(語句)模式來創建自己的Null Checking模式:

if ($EXPR$.IsNullOrDefault()) throw new System.ArgumentNullException($NAME$);

但這也不起作用。 如何配置Rider以將我的自定義方法視為guid.HasValueguid != null

我不確定Rider是否足夠聰明,無法識別出您已經檢查了這一點。 我認為您可以改為使用?. 檢查是否為null符號

var x = guid?.Value;

在評估.value之前,檢查guid是否為null ,如果是這種情況,則僅返回null

然后,您可以將支票放到后面,這樣它就會像

var x guid?.value;
if(x is null)
    Throw new Exception();

或者,您可以返回默認值,而不是引發異常(調用)。

讓我知道它是如何工作的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM