Boxing/unboxing should be avoided
Boxing wraps a value type inside a System.Object on the managed heap (implicit); unboxing extracts it (explicit). More: https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
Disabled by default to avoid noise; re-activate if boxing/unboxing matters to your team.
Disabled by default to avoid noise; re-activate if boxing/unboxing matters to your team.
How to fix
With .NET generics (especially generic collections), boxing/unboxing is rarely needed and can usually be refactored away. See: http://stackoverflow.com/questions/4403055/boxing-unboxing-and-generics
Profile for CPU-heavy methods using boxing/unboxing, especially in a loop, and refactor them. Severity is Low: more an advice than a problem.
Profile for CPU-heavy methods using boxing/unboxing, especially in a loop, and refactor them. Severity is Low: more an advice than a problem.
CQLinq source
This rule is written in CQLinq, C# LINQ over the NDepend code model. It ships with every new NDepend project: you can read it, adapt it, or use it as a starting point for your own custom rules.
// <Name>Boxing/unboxing should be avoided</Name>
// <Id>ND1314:BoxingUnboxingShouldBeAvoided</Id>
warnif count > 0 from m in JustMyCode.Methods where
m.IsUsingBoxing ||
m.IsUsingUnboxing
select new {
m,
m.NbLinesOfCode,
m.IsUsingBoxing,
m.IsUsingUnboxing,
relyOn =
m.IsUsingBoxing && m.IsUsingUnboxing ? "boxing and unboxing" :
m.IsUsingBoxing ? "boxing" : "unboxing",
Debt = 5.ToMinutes().ToDebt(),
Severity = Severity.Low
}
//<Expl>
// The *{0}* relies on {4} that can negatively impact performances.
//</Expl>
//<Desc>
// *Boxing* wraps a value type inside a *System.Object* on the managed heap
// (implicit); *unboxing* extracts it (explicit). More:
// https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
//
// **Disabled by default** to avoid noise; re-activate if boxing/unboxing
// matters to your team.
//</Desc>
//<HowToFix>
// With .NET generics (especially generic collections), boxing/unboxing is
// rarely needed and can usually be refactored away. See:
// http://stackoverflow.com/questions/4403055/boxing-unboxing-and-generics
//
// Profile for CPU-heavy methods using boxing/unboxing, especially in a
// **loop**, and refactor them. Severity is **Low**: more an advice than a
// problem.
//</HowToFix>
Open in the interactive Rules Explorer · All default rules
Design: all 16 items
- Avoid custom delegates ND1300
- Types with disposable instance fields must be disposable ND1301
- Disposable types with unmanaged resources should declare finalizer ND1302
- Methods that create disposable object(s) and that don't call Dispose() ND1303
- Disposable Types Must Unsubscribe Events ND1315
- Classes that are candidate to be turned into structures ND1304
- Avoid namespaces with few types ND1305
- Nested types should not be visible ND1306
- Declare types in namespaces ND1307
- Empty static constructor can be discarded ND1308
- Instances size shouldn't be too big ND1309
- Attribute classes should be sealed ND1310
- Don't use obsolete types, methods or fields ND1311
- Do implement methods that throw NotImplementedException ND1312
- Override equals and operator equals on value types ND1313
- Boxing/unboxing should be avoided ND1314