私は参照型にのみ適用できる拡張メソッドに取り組んでいます。ただし、現在は値のボックス化とボックス化解除を行っていると思います。どうすればこれを回避できますか?
namespace System
{
public static class SystemExtensions
{
public static TResult GetOrDefaultIfNull<T, TResult>(this T obj, Func<T, TResult> getValue, TResult defaultValue)
{
if (obj == null)
return defaultValue;
return getValue(obj);
}
}
}
使用例:
public class Foo
{
public int Bar { get; set; }
}
いくつかの方法で:
Foo aFooObject = new Foo { Bar = 1 };
Foo nullReference = null;
Console.WriteLine(aFooObject.GetOrDefaultIfNull((o) => o.Bar, 0)); // results: 1
Console.WriteLine(nullReference.GetOrDefaultIfNull((o) => o.Bar, 0)); // results: 0