سؤال

We have a sanity check method

void IsNotNull<T>(T obj){...}

invocation

IsNotNull(obj); 

I want to replace this to invoke the other overload that takes a second param of type string (message)

void IsNotNull<T>(T obj, string message){...}

So I want to change the invocation as

IsNotNull(obj, "obj is null");

I'm trying to achieve this using resharper's find pattern and replace.

So my find pattern is : IsNotNull($args$) - This works fine and it finds the method calls

Replace pattern: IsNotNull($args$, "$args$ is null") - This doesn't do anything

I also tried this IsNotNull($args$, """" + $args$ + """")

--Edited-- The suggestion box showing the correct wording(for both argument and identifier), but once applied it's different. I'm using Resharper 6

enter image description here

After applying the suggestion I get this enter image description here

When I click Edit Pattern enter image description here

هل كانت مفيدة؟

المحلول

What is your $args$ parameter defined as in the Search and Replace? If you make it to be Identifier, then you replace should work:

Find: IsNotNull($args$) - where $args$ is an Identifier
Replace: IsNotNull($args$, "$args$ is null")

You should have the result you want, i.e. IsNotNull(obj, "obj is null").

نصائح أخرى

You can consider trying to use this pattern:

IsNotNull($args$, string.Format("{0} is null", $args$))

It works perfectly for me with ReSharper 7.1.

It seems, that R# doesn't want to evaluate argument expression inside of string literals normally. Given your pattern

IsNotNull($args$, "$args$ is null")

It replaced IsNotNull(5); by IsNotNull(5, 5); which is odd

The easiest method would be to rewrite the original method like so:

void IsNotNull<T>(T obj){
    IsNotNull(obj, "obj is null");
}

Then click on the method signature, and choose Refactor->Inline Method (Ctrl+R, Ctrl+I). If you need to keep the original method signature around, you can, or you can check the box for "Remove inlined method declaration."

EDIT: Looks like hmemcpy's solution works in 7.1, so I'd suggest an upgrade. If that's not possible, however, try the following regular expression find-and-replace in Visual Studio.

Find: IsNotNull\(([^\),]+)\);
Replace: IsNotNull($1, "$1 is null");

Make sure "Use Regular Expressions" is checked, and "Look in:" should be "Entire Solution".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top