diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs index 25f8356c04..e828ebbb9a 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs @@ -78,6 +78,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring return; if (!foundConversion.IsExplicit) return; + var implicitConversion = conversion.ImplicitConversion(exprType, castToType); + if (implicitConversion != Conversion.None) + return; AddIssue(expression, string.Format(ctx.TranslateString("Cast to '{0}'"), castToType.Name), script => { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs index 4d129a2d7a..6af34c8099 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs @@ -132,6 +132,29 @@ class TestClass Point p = new Point(); $p += new Vector(); } +}"; + Test(input, 0); + } + + [Test] + public void TestImplicitOperator() + { + var input = @" +struct Vector { + public static implicit operator Point(Vector v) { return new Point(); } +} + +struct Point { + +} + +class TestClass +{ + void TestMethod () + { + Point p; + p = new Vector (); + } }"; Test(input, 0); }