В NDepend 4 (v4.1.0.6871) я использую запрос дизайна по умолчанию «Следует избегать упаковки/распаковки»:
warnif percentage > 5 from m in Application.Methods where
m.IsUsingBoxing ||
m.IsUsingUnboxing
select new { m, m.NbLinesOfCode, m.IsUsingBoxing, m.IsUsingUnboxing }
Он сообщает, что следующий метод (вдохновленный и украденный из MiscUtil Джона Скита) использует заниматься боксом:
public static void ThrowIfNull<T>(this T target, string name) where T : class
{
if (target == null)
{
throw new ArgumentNullException(name ?? string.Empty);
}
}
Я не понимаю, как этот метод может использовать бокс. Я нигде не использую приведение.
Я попробовал следующую версию на тот случай, если оператор объединения с нулевым значением как-то за кулисами использует бокс:
public static void ThrowIfNull<T>(this T target, string name) where T : class
{
if (target == null)
{
throw new ArgumentNullException(name);
}
}
... но и с этим мне не повезло, NDepend все же сообщил, что метод использует бокс.
Любые идеи?