我正在清理我的代码,试图缩短某些内容
现在我偶然发现了:
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);
现在当然这不起作用,但我不知道如何做到这一点(如果可能的话)
答案 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那样遍历变量名,但是对它的需求很可能意味着设计缺陷。