Why does ReSharper recommend using "as" keyword instead of "is"?
c#, casting, operators
Solution
`as` is arguably better if the resulting expression is used later on; `is` is just as good if not. E.g.
if (sender is Button) {
Button button = (Button)sender; // just use `as`, as suggested
button.Push();
(I thought ReSharper only gave a warning/hint in the case where a duplicate cast could be eliminated, such as this..)
That being said, I use the structure
Button button;
if ((button = sender as Button) != null) {
button.Push();
to ensure that the variable is initialized in (and only starting in) the condition - this defers the application of `as` to the appropriate conditional expression and allows C#/ReSharper to detect some incorrect [uninitialized] variable usage cases.
See also:
Casting vs using the 'as' keyword in the CLR - Jon's answer has 'is/(cast)' pairings as a "don't do" raising concerns with both shared and field vs. property access. Performance and 'is' vs 'as' differences are also discussed.
And a duplicate Which code is better: using "as" or "is"?, with some better related links.
Problem
I using `Resharper` 8 and when I wrote ``` if (sender is Button) ``` `Resharper` reclaim to use `as` keyword and change it to: ``` Button button = sender as Button; if (button != null) ``` There’s any particular reason? are using `as` is real better then `is`? or in this case `as` is better?