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);

当然,这不会起作用,但我不知道如何做到这一点(如果可能的话)

For循环将图像添加到图像列表

您可以通过以下代码迭代资源

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/