簡體   English   中英

擺脫“可空”警告

[英]Get rid of "Nullable" warnings

我有以下代碼:

var keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonbytes);
var claims = keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString()));

如您所見,我的 ide 向我顯示了 Nullable 警告。

vscode警告

我知道我必須先檢查變量是否為 null,然后再使用它來消除此類警告。 但是我不知道如何在 linq 查詢中使用動態變量來做到這一點..?

我希望有人能告訴我在這種情況下如何避免這樣的警告。

IDE 給你這個警告,因為這個變量在到達這條線時可能是null

如果您完全確信永遠不會出現這種情況,您可以使用! 逃避這些警告:

keyValuePairs!.Select(kvp => new Claim(kvp.Key, kvp.Value!.ToString()));

正如pazcal所說,我已經可以使用a了。 在 object 逃避這樣的警告之后。 非常感謝您的提示。

無論如何,我現在將我的 function 更改為:

private IEnumerable<Claim> ParseClaimsFromJwt(string jwt)
        {
            if(jwt!=null && !String.IsNullOrEmpty(jwt)) {
                var payload = jwt.Split('.')[1];
                var jsonbytes = ParseBase64WithoutPadding(payload);
                var keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonbytes);
                if(keyValuePairs!=null && keyValuePairs.Count > 0) {
                    var claims = keyValuePairs!.Select(kvp => new Claim(kvp.Key!, kvp.Value!.ToString()!));
                    return claims;
                } else {
                    throw new Exception("Error while deserializing jwt json string.");
                }
            } else {
                throw new Exception("jwt value cannot be empty or null");
            }            
        }

我希望,現在這是安全的:-)

非常感謝您的幫助。

在你的 .csproj 文件中,你會發現像這樣

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

<Nullable>enable</Nullable>字段將被禁用。 我認為這是您的解決方案。 但不是安全的。

var claims = keyValuePairs?.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString() ?? string.Empty));

這個怎么樣?

暫無
暫無

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

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