用于循环以将图像添加到图像列表

时间:2014-04-09 13:30:52

标签: c# for-loop

我正在清理我的代码,试图缩短某些内容

现在我偶然发现了:

  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循环缩短

类似的东西:

for(int i=1; i<=15; i++)
        ImageList.Add(test.Properties.Resources.test +i);

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以使用反射来获取值:

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

答案 2 :(得分:0)

您可以在IEnumerable<Image>对象

的类中定义类型Resources的属性
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); 
}

答案 3 :(得分:-2)

我刚刚发现有一个用于评估名为Flee的C#表达式的库。显然你可以用它来评估C#代码,这样就可以像JavaScript那样遍历变量名,但是对它的需求很可能意味着设计缺陷。

http://flee.codeplex.com/