Promote to Generic Parameter
- 3 minutes to read
Purpose
Takes a class reference or struct reference inside a method block and turns that into a type parameter of the generic method. The Promote to Generic Parameter refactoring also updates all calling code.
This refactoring reduces the time it takes to make a method applicable to more classes in your code.
Availability
Available when the cursor is in a class reference or struct reference in a method.
How to Use
Place the caret in a class reference or struct reference in a method.
using System; namespace ConsoleApp15 { public class Verifier { public string CheckText(string text) { var validatedText = text ?? ""; if (TrimSpaces) validatedText = validatedText.Trim(); return validatedText; } public bool TrimSpaces { get; set; } } interface SpellChecker { string Check(Verifier verifier, string text); } class Control : SpellChecker { void SetRules<V>(V verifier) where V : Verifier { verifier.TrimSpaces = true; } public string Check(Verifier verifier, string text) { SetRules<Verifier>(verifier); return verifier.CheckText(text); } public void LogText(string text) { string verifiedText = Check(new Verifier(), text); Console.WriteLine(verifiedText); } } }
Press Ctrl+. or Ctrl+~ to invoke the Code Actions Menu.
Select Promote to Generic Parameter from the menu and press Enter.
After execution, this refactoring turns a regular method into a generic method.
using System;
namespace ConsoleApp15
{
public class Verifier
{
public string CheckText(string text)
{
var validatedText = text ?? "";
if (TrimSpaces)
validatedText = validatedText.Trim();
return validatedText;
}
public bool TrimSpaces { get; set; }
}
interface SpellChecker
{
string Check<T>(T verifier, string text) where T : Verifier;
}
class Control : SpellChecker
{
void SetRules<V>(V verifier)
where V : Verifier
{
verifier.TrimSpaces = true;
}
public string Check<T>(T verifier, string text) where T : Verifier
{
SetRules<T>(verifier);
return verifier.CheckText(text);
}
public void LogText(string text)
{
string verifiedText = Check<Verifier>(new Verifier(), text);
Console.WriteLine(verifiedText);
}
}
}