All docs
V20.1
20.1
19.2
19.1
The page you are viewing does not exist in version 19.1. This link will take you to the root page.
18.2
The page you are viewing does not exist in version 18.2. This link will take you to the root page.
18.1
The page you are viewing does not exist in version 18.1. This link will take you to the root page.
17.2
The page you are viewing does not exist in version 17.2. This link will take you to the root page.

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

  1. 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);
        }
    }
}
  1. Press Ctrl+. or Ctrl+~ to invoke the Code Actions Menu.

  2. Select Promote to Generic Parameter from the menu and press Enter.

    RemoveQualifier

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);
        }
    }
}