For循环将图像添加到图像列表
本文关键字:图像 列表 添加 For 循环 | 更新日期: 2023-09-27 17:57:39
我正在清理我的代码,试图做空
现在我偶然发现:
ImageList.Add(test.Properties.Resources.test1);
ImageList.Add(test.Properties.Resources.test2);
ImageList.Add(test.Properties.Resources.test3);
ImageList.Add(test.Properties.Resources.test4);
ImageList.Add(test.Properties.Resources.test5);
(其中有15个)想知道是否可以用for loop 缩短
类似于:
for(int i=1; i<=15; i++)
ImageList.Add(test.Properties.Resources.test +i);
当然,这不会起作用,但我不知道如何做到这一点(如果可能的话)
您可以通过以下代码迭代资源
using System.Collections;
using System.Globalization;
using System.Resources;
...
ResourceSet resourceSet = MyResourceClass.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (DictionaryEntry entry in resourceSet)
{
string resourceKey = entry.Key;
object resource = entry.Value;
}
您可以使用反射来获取值:
public class Something
{
public int Test1 { get; set; }
public int Test2 { get; set; }
public int Test3 { get; set; }
public int Test4 { get; set; }
}
var thing = new Something();
var imageProperties = typeof(Something)
.GetProperties()
.Where(p => p.Name.StartsWith("Test"));
var imagesToAdd = imageProperties
.Select(property => property.GetValue(thing))
.ToList();
您可以在Resources
对象的类中定义类型为IEnumerable<Image>
的属性
public IEnumerable<Image> Images
{
get
{
yield return test1;
yield return test2;
yield return test3;
yield return test4;
yield return test5;
...
}
}
然后使用它来填充ImageList
foreach(var image in test.Properties.Resources.Images)
{
ImageList.Add(image);
}
我刚刚发现有一个用于评估C#表达式的库,叫做Flee。显然,你可以用它来评估C#代码,这样你就可以像JavaScript一样在变量名上循环,但对它的需求很可能意味着设计缺陷。
http://flee.codeplex.com/