95418


教えてください。  
画像の赤枠部分はnull許容型じゃないのにnullが来るかも？というワーニングらしいです。  
このワーニングが表示されないように正しくコーディングする方法を教えてください。

[![null許容型のエラー](https://i.stack.imgur.com/SxTDo.jpg)](https://i.stack.imgur.com/SxTDo.jpg)

よろしくお願いいたします。


CC BY-SA 4.0
2023-06-29T07:59:55.350
95413
2023-06-29T22:14:33.160
52880
question
c# wpf
C# null 許容参照型を教えて！


## `Value.ToString`

`Value.ToString()`は`object.ToString()`のオーバーライドとみなされると思います。  
`object.ToString()`は戻り値が`string?`と`null`許容参照型になっていますが、`Type.GetField`は`null`を許容しないので警告となります。  
<https://learn.microsoft.com/ja-
jp/dotnet/api/system.object.tostring?view=net-7.0>

この場合、`null`チェックや`string.InNullOrEmpty`によるチェックを入れる必要があるでしょう。

[code]

    var toString = Value.ToStrin();
    if (string.IsNullOrEmpty(toString)) return null;
    var fieldInfo = Value.GetType().GetField(toString);
    
[/code]

## `GetCustomAttribute`

次に、`GetCustomAttribute`メソッドも戻り値が`Attribute?`と`null`許容参照型になっています。  
<https://learn.microsoft.com/ja-
jp/dotnet/api/system.reflection.customattributeextensions.getcustomattribute?view=net-7.0#system-
reflection-customattributeextensions-getcustomattribute(system-reflection-
memberinfo-system-type)>

キャストにおいて`DescriptionAttribute?`あたりにしておくところでしょうか？

[code]

    var attr = (DescriptionAttribute?)
        fieldInfo.GetCustomAttribute(typeof(DescriptionAttribute));
    
[/code]

## 戻り値

このメソッドは`string`型、つまり`null`を許容していません。  
`null`を返したいなら、メソッド自体の戻り値も`string?`とする必要があります。

または、`return null;`をやめて、`return string.Empty;`などと空の文字列を返すこともありでしょう。


CC BY-SA 4.0
2023-06-29T12:42:56.970
95418
2023-06-29T22:14:33.160
2023-06-29T22:14:33.160
4684
4684
95413
answer