Я автоматически пишу список 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());
}
}
Кажется, это работает, но мне интересно, что не так с моим оригинальным сценарием. Спасибо за любые ответы.