Enumerable.Repeat плохо работает с циклом for при инициализации List‹›

Я автоматически пишу список PropertyInfo для свойств класса магазина. Но работает странно. Вот что я написал:

Класс свойств:

public class ValueLib
{
    public int Value1 { get; set; }
    public string Value2 { get; set; }
    public bool Value3 { get; set; }
}

public class InfoLib
{
    public System.Reflection.PropertyInfo Info { get; set; }  // Store PropertyInfo of properties in ValueLib.
}

Я ожидаю создать список List<InfoLib> для хранения информации. Что должно иметь этот результат, когда я печатаю InfoLib.Info:

Int32 Value1
String Value2
Boolean Value3

Вот основной скрипт:

public class Program
{
    public ValueLib ValueLib { get; set; }
        
    private static List<InfoLib> _infoLib;
    public static List<InfoLib> InfoLib
    {
        get
        {
            _infoLib = _infoLib ?? new List<InfoLib>(Enumerable.Repeat(new InfoLib(), typeof(ValueLib).GetProperties().Length).ToList());  // Initialize list using Enumerable. ------(1)
            _infoLib.ForEach(p => p.Info = typeof(ValueLib).GetProperties()[_infoLib.IndexOf(p)]);  // Check every properties and stored the corresponding PropertyInfo.
            return _infoLib;
        }
        set { _infoLib = value; }
    }
        
    public static void Main(string[] args)
    {
        InfoLib.ForEach(p => Console.WriteLine(p.Info));  // Print every propertyInfo.
    }
}

При компиляции этой программы выдало такое, чего я не ожидал:

Int32 Value1
Int32 Value1
Int32 Value1

После нескольких попыток я обнаружил, что это работает при замене (1) этим скриптом:

if(_infoLib != new List<InfoLib>(Enumerable.Repeat(new InfoLib(), typeof(ValueLib).GetProperties().Length)))
{
    _infoLib = new List<InfoLib>();
    // Use normal for loop to initialize the list
    for(int i = 0; i < typeof(ValueLib).GetProperties().Length; i++)
    {
        _infoLib.Add(new InfoLib());
    }
}

Кажется, это работает, но мне интересно, что не так с моим оригинальным сценарием. Спасибо за любые ответы.


person Edward Tu    schedule 26.12.2020    source источник
comment
проблема решена, спасибо!   -  person Edward Tu    schedule 26.12.2020