2021.2/CSharp20212/NullableReferenceTypes/ChangeNullability.cs (42 lines of code) (raw):
using System.Collections.Generic;
#pragma warning disable 8509
#pragma warning disable 8618
#pragma warning disable 8524
// ReSharper disable UnusedMember.Global
// ReSharper disable UnusedMember.Local
#nullable enable
namespace CSharp20212.NullableReferenceTypes
{
public class Employees
{
private readonly List<Person> _supportEngineers;
private readonly List<Person> _softwareEngineers;
public Employees(List<Person> supportEngineers, List<Person> softwareEngineers)
{
_supportEngineers = supportEngineers;
_softwareEngineers = softwareEngineers;
}
public IEnumerable<Person> AllEmployees
{
get
{
var employees = new List<Person>();
employees.AddRange(_supportEngineers);
employees.AddRange(_softwareEngineers);
return employees;
}
}
// 1. Add ? to Person (or caret on person, Refactor This -> Make nullable)
// 2. See refactoring show up in gutter, use it ("Apply nullability change")
// 3. Review type changes, see class will be updated
// 4. Apply, see List<Person?> etc. everywhere
public void AddEmployee(Person person, Role role)
{
var targetList = role switch
{
Role.SupportEngineer => _supportEngineers,
Role.SoftwareEngineer => _softwareEngineers,
};
targetList.Add(person);
}
}
public enum Role
{
SupportEngineer,
SoftwareEngineer
}
}