C#におけるクラス型を引数で受けた時のnull判定
タイプセーフを保証するために、 object
ではなくちゃんとしたクラス型で引数を受けたいことがある
その際に 指定しなかったパラメタ をどうやって弾くかという話
例えば
// a class public class Person { public string Name { get; set; } public int Age { get; set; } } var redis = new RedisString<Person>(RedisServer.Default, "test-string-key"); await redis.Set(new Person { Name = "John" });
みたいな時の Person.Age
をSetメソッドの中でどう弾くか、ということ
実装
ServiceStack/ServiceStack.OrmLite
var value = fieldDef.GetValue(item); if (excludeDefaults && (value == null || (!fieldDef.IsNullable && value.Equals(value.GetType().GetDefaultValue())))) continue;
リフレクションを使って null
比較とデフォルト値比較。後者は拡張メソッド
Jil
foreach (var memberName in metaObj.GetDynamicMemberNames()) { var getter = GetGetMember(dynType, memberName); var val = getter(dyn); if (val == null && opts.ShouldExcludeNulls) continue;
こちらもリフレクションからのnull比較
Jil/DynamicSerializer.cs at 71fc65c4148f1aa25fdf9a5fc166e51f91865ec9 · kevin-montrose/Jil · GitHub