У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален.
List GetList(int version)
{
var list = new List();
if (version == 1)
{
list.Add("A");
list.Add("B");
list.Add("C");
list.Add("D");
list.Add("E");
}
if (version == 2)
{
list.Add("A");
list.Add("B");
list.Add("B2");
list.Add("B3");
list.Add("C");
list.Add("D");
list.Add("E");
}
if (version == 3)
{
list.Add("A");
list.Add("B");
list.Add("B2");
list.Add("B3");
list.Add("D");
list.Add("E");
}
if (version == 11)
{
list.Add("A");
list.Add("B");
list.Add("B2");
list.Add("B3");
list.Add("C");
list.Add("D");
list.Add("E");
}
return list;
}
Итак, существует много кода, содержащего в основном повторяющиеся данные. Выше приведен лишь небольшой отрывок.
Я хочу, чтобы сгенерированный код выглядел следующим образом:
List GetList2(int version)
{
var list = new List();
list.Add("A");
list.Add("B");
if (version >= 2)
{
list.Add("B2");
list.Add("B3");
}
if (version = 11)
{
list.Add("C");
}
list.Add("D");
list.Add("E");
return list;
}
Поэтому мне нужен алгоритм, который может преобразовать исходную информацию Dictionary в форму, подходящую для создания GetList2.Я полагаю, что сигнатура метода должна быть такой (обратите внимание на использование IEquatable, реальные члены списка реализуют этот интерфейс, я использовал строки в вопросе для ясности):
public class ListMerger
{
public static List Merge(Dictionary input) where T : IEquatable
{
throw new NotImplementedException();
}
}
public record VersionRange(int? MinVersion, int? MaxVersion);
public record VersionedChunk(List Data, List Versions) where T : IEquatable;
По просьбе я подготовил несколько модульных тестов для метода Merge:
У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален. [code]List GetList(int version) { var list = new List(); if (version == 1) { list.Add("A"); list.Add("B"); list.Add("C"); list.Add("D"); list.Add("E"); } if (version == 2) { list.Add("A"); list.Add("B"); list.Add("B2"); list.Add("B3"); list.Add("C"); list.Add("D"); list.Add("E"); } if (version == 3) { list.Add("A"); list.Add("B"); list.Add("B2"); list.Add("B3"); list.Add("D"); list.Add("E"); } if (version == 11) { list.Add("A"); list.Add("B"); list.Add("B2"); list.Add("B3"); list.Add("C"); list.Add("D"); list.Add("E"); } return list; } [/code] Итак, существует много кода, содержащего в основном повторяющиеся данные. Выше приведен лишь небольшой отрывок. Я хочу, чтобы сгенерированный код выглядел следующим образом: [code]List GetList2(int version) { var list = new List(); list.Add("A"); list.Add("B"); if (version >= 2) { list.Add("B2"); list.Add("B3"); } if (version = 11) { list.Add("C"); } list.Add("D"); list.Add("E"); return list; } [/code] Поэтому мне нужен алгоритм, который может преобразовать исходную информацию Dictionary в форму, подходящую для создания GetList2.Я полагаю, что сигнатура метода должна быть такой (обратите внимание на использование IEquatable, реальные члены списка реализуют этот интерфейс, я использовал строки в вопросе для ясности):[code]public class ListMerger { public static List Merge(Dictionary input) where T : IEquatable { throw new NotImplementedException(); } }
public record VersionRange(int? MinVersion, int? MaxVersion);
public record VersionedChunk(List Data, List Versions) where T : IEquatable; [/code] По просьбе я подготовил несколько модульных тестов для метода Merge: [code][TestClass] public sealed class Test1 { [TestMethod] public void WhenNoVersions_ReturnEmptyList() { Dictionary input = [];
Assert.AreEqual(2, output[3].Data.Count); Assert.IsTrue(output[3].Data.SequenceEqual(["D", "E"])); Assert.AreEqual(0, output[3].Versions.Count); } } [/code] Ссылки на решения на других языках также приветствуются.
У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален.
List GetList(int version)
{
var...
У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален.
List GetList(int version)
{
var...
У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален.
List GetList(int version)
{
var...
У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален.
List GetList(int version)
{
var...
У меня есть функция, которая возвращает один из нескольких похожих списков в зависимости от условия. Код генерируется из исходного Dictionary, содержащего данные. Я не привожу генератор, поскольку его код тривиален.
List GetList(int version)
{
var...