Skip to main content

CRR0047 - The type can be moved to a separate file

  • 3 minutes to read

This analyzer identifies types whose names differ from the file name. These types can be moved to a separate file (with the same name as the type) if a file contains two or more types. This improves code readability.

//PluginManager.cs

using System;
using System.Collections.Generic;

namespace MySolution
{
    public class PluginManager
    {
        public List<PluginInfo> Plugins { get; private set; }
        public void AddPlugin(PluginInfo plugin)
        {
            if (Plugins == null)
                Plugins = new List<PluginInfo>();
            Plugins.Add(plugin);
        }
    }
    public class PluginInfo
    {
        public PluginInfo(string name, string path, bool enabled)
        {
            Name = name;
            Path = path;
            Enabled = enabled;
        }
        public string Name { get; set; }
        public string Path { get; set; }
        public bool Enabled { get; set; }
    }
}

To fix the issue, move the type declaration to a separate file:

//PluginManager.cs

using System;
using System.Collections.Generic;

namespace MySolution
{
    public class PluginManager
    {
        public List<PluginInfo> Plugins { get; private set; }
        public void AddPlugin(PluginInfo plugin)
        {
            if (Plugins == null)
                Plugins = new List<PluginInfo>();
            Plugins.Add(plugin);
        }
    }
}
//PluginInfo.cs

using System;
using System.Collections.Generic;

namespace MySolution
{
    public class PluginInfo
    {
        public PluginInfo(string name, string path, bool enabled)
        {
            Name = name;
            Path = path;
            Enabled = enabled;
        }
        public string Name { get; set; }
        public string Path { get; set; }
        public bool Enabled { get; set; }
    }
}

Call the Move Type to File refactoring to move a type declaration to a new source code file.