Как изменить список в C#?

Как мне сделать изменение списка? Мне нужно отдавать в конечном итоге исходных список и изменённый.

Я подумал, что это должно выполняться следующим образом:

        public IReadOnlyList<SpanDto> ConvertSpans(ref List<SpanDto> spanDtos, UnitSystem unitSystem)
    {
        foreach (var spanDto in  spanDtos)
        {
            if (unitSystem == UnitSystem.Metric)
            {
                spanDto.Length /= 3.28084;

                spanDto.NoLoading.Sag /= 3.28084;
                spanDto.NoLoading.SpanPercent = spanDto.NoLoading.Sag / spanDto.Length;
                spanDto.NoLoading.Tension *= 4.448222 / 1000;

                spanDto.AtLoading.Sag /= 3.28084;
                spanDto.AtLoading.SpanPercent = spanDto.AtLoading.Sag / spanDto.Length * 100;
                spanDto.AtLoading.HSag /= 3.28084;
                spanDto.AtLoading.VSag /= 3.28084;
                spanDto.AtLoading.Tension *= 4.448222 / 1000;
            }
        }

        return spanDtos;
    }

По итогу мне возвращается как изменённых одинаковых списка


Ответы (2 шт):

Автор решения: tonysdev

Можете использовать метод CopyTo для того, чтобы копировать ваш исходный список в тот, с которым вы будете работать.

→ Ссылка
Автор решения: CrazyElf

Примерно так это должно выглядеть, насколько я понял ваш вопрос:

public IReadOnlyList<SpanDto> ConvertSpans(List<SpanDto> spanDtos, UnitSystem unitSystem)
{
    ret = new List<SpanDto>();
    foreach (var spanDto in spanDtos)
    {
        var item = new SpanDto();
        // тут заполняете поля теми данными, которые не меняются
        // ...
        if (unitSystem == UnitSystem.Metric)
        {
            // тут заполняете изменяющиеся поля
            // с использованием данных из spanDto
            // ...
        }
        ret.Add(item);
    }

    return ret;
}

Исходный список есть у тех, кто его передал как параметр. А новый список вы вернёте из функции.

→ Ссылка