使用 C# 反射将变量大小的集合分配给类属性
本文关键字:分配 集合 属性 反射 变量 使用 | 更新日期: 2023-09-27 18:30:15
>我有一个名为Foo
的目标类,具有以下属性:
public string Bar1 { get; set; }
public string Bar2 { get; set; }
public string Bar3 { get; set; }
public string Bar4 { get; set; }
public string Bar5 { get; set; }
public string Bar6 { get; set; }
我正在读取一个文件,该文件可能包含任意数量的"条形图",我将其读入名为fileBars
的集合中。我需要了解如何使用反射来迭代fileBars
并将第一个分配给Bar1
,第二个分配给Bar2
,等等。
我尝试了在网上找到的几件事,最近一次是玩下面显示的内容,但我没有任何运气。熟悉反射的人可以指出我正确的方向吗?
var count = fileBars.Count();
var myType = Foo.GetType();
PropertyInfo[] barProperties = null;
for (var i = 0; i < count; i++)
{
barProperties[i] = myType.GetProperty("Bar" + i + 1);
}
我认为您不需要将PropertyInfo
对象存储在数组中;您可以随时分配值:
var count = fileBars.Count();
var instance = new Foo();
for (var i = 1; i <= count; i++)
{
var property = typeof(Foo).GetProperty("Bar" + i);
if(property != null)
property.SetValue(instance, fileBars[i - 1];
else
// handle having too many bars to fit in Foo
}
您需要初始化barProperties
:
PropertyInfo[] barProperties = new PropertyInfo[count];
若要为属性赋值,请使用 SetValue
:
barProperties[i].SetValue(Foo, fileBars[i] );
除非你需要保留找到的所有属性供以后使用,否则你不需要 barProperties
数组:
var myType = foo.GetType();
int barCount = 0;
foreach(string barValue in fileBars)
{
barCount++;
var barProperty = myType.GetProperty("Bar" + barCount);
barProperty.SetValue(foo, barValue, null);
}