Tool to refactor C# var to explicit type

前端 未结 7 642
陌清茗
陌清茗 2020-12-03 17:15

Our coding standards ask that we minimise the use of C# var (suggests limiting it\'s use to being in conjunction with Linq). However there are times when using generics wher

相关标签:
7条回答
  • 2020-12-03 17:34

    I've got ReSharper 4.1, and it does offer this option (in either direction).

    Actually, I'd recommend challenging the standard... the former is far more readable than the latter (especially if you call the variable pair or something similar). I would't use "var" for var i = 0, but it is ideally suited to the above.

    For bulk changing, go to:

    • Cleanup Code... (pick a profile => "Edit Profiles" => Tools => Code Cleanup)
      • C#
        • Use 'var' in declaration
          • Replace direction = Can 'var' to type usage
          • 'foreach' iterator declaration style = Always use explicit type
          • Local variable declaration style = Always use explicit type

    and run...

    0 讨论(0)
  • 2020-12-03 17:36

    I'd argue that where you have complex generic types on your domain objects you should typedef them

    class DomainValueCollection : KeyValue<DateTime, Dictionary<string, float>>{}
    

    where DomainValueCollection is somehting that makes sense in your domain context

    the code then becomes

    var allItems = new DomainValueCollection();
    

    rather than

    var allItems = new KeyValue<DateTime, Dictionary<string, float>>();
    
    0 讨论(0)
  • 2020-12-03 17:37

    @Adam - you can't declare a class here, since that won't be what comes back from an IDictionary<,>.GetEnumerator() - however, you can alias via using:

    using InnerPair = System.Collections.Generic.KeyValuePair<System.DateTime,
        System.Collections.Generic.Dictionary<string, float>>;
    

    Then:

    foreach(InnerPair pair in dict) {...}
    

    This is just a type alias, so works fine.

    0 讨论(0)
  • 2020-12-03 17:40

    Resharper does this (only in version 4+ I'm sure of it) but I don't know if its possible to simply convert var into the specific type automatic - eventually you need to go to the "var" and then a light shows up which gives you the option to specify the type explicitly

    0 讨论(0)
  • 2020-12-03 17:43

    This is possible in Visual Studio 2017.

    Tools > Options > Text Editor > C# > Code Style > General –

    Find 'var' preferences > When variable type is apparent. For Preference select "Prefer explicit type," and for Severity select "Suggestion."

    You'll now get the light bulb actions when you use var, and you can quickly change to the explicit type by using the Ctrl. shortcut key.

    0 讨论(0)
  • 2020-12-03 17:59

    DevExpress supports this with CodeRush, and they recently starting giving some of the refactorings away for free. The refactoring you are looking for is "Make Explicit"

    http://devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/

    0 讨论(0)
提交回复
热议问题