【发布时间】:2014-12-04 15:37:28
【问题描述】:
假设您有一个List<Image>,您可以使用类似这样的方式添加在解决方案资源中找到的所有图像;
using (ResourceSet resourceSet = SomeProject.Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true))
{
foreach (DictionaryEntry entry in resourceSet)
{
SomeList.Add((Image)entry.Value);
}
}
在这种情况下,我们的资源中将包含三张图片。 Apple.png Banana.png, Cactus.png
如何按字母顺序对这个列表进行排序,以便以正确的顺序遍历它,得到Apple -> Banana -> Cactus?
我已阅读How to sort ResourceSet in C#,我试图将其应用于我的情况,但无济于事。
我自己尝试将entry.Key 分配给图像的标签,然后执行someList.OrderBy(f => f.Tag).ToList();
这是我用来测试的完整代码
List<Image> someList = new List<Image>();
private void button1_Click(object sender, EventArgs e)
{
using (ResourceSet resourceSet = WindowsFormsApplication52.Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true))
{
foreach (DictionaryEntry entry in resourceSet)
{
Image i = (Image)entry.Value;
i.Tag = entry.Key;
someList.Add((Image)i);
}
someList.OrderBy(f => f.Tag).ToList();
}
foreach(var x in someList)
{
PictureBox pb = new PictureBox();
pb.Image = x;
pb.Size = new System.Drawing.Size(200, 200);
pb.SizeMode = PictureBoxSizeMode.Zoom;
flowLayoutPanel1.Controls.Add(pb);
}
}
这是我似乎每次都得到的结果,
我不知道它是否考虑了文件大小,但在这种情况下,图像的文件大小也是按顺序排列的。 (Apple.png 最大,cactus 最小)。
非常感谢您的帮助。
【问题讨论】:
-
您可以使用已排序的字典为您进行排序。只需将所有文件添加到其中,并将名称作为键。然后执行 foreach 并循环遍历以按字母顺序检索所有内容。
-
您是否查看过每个项目的
Tag属性值并确认它们的名称正确无误?Apple、Banana和Cactus? -
@deathismyfriend 我什至不知道它的存在,正如你所说,我将我的列表更改为排序字典,并且.. 它已排序!非常感谢。如果可以的话,我会将您的评论标记为答案。 Dave Zych 是的,我做到了,标签设置正确。
-
@stella。我做了一个回答。如果您想接受它,我们将不胜感激。很高兴我能帮上忙。
标签: c# sorting visual-studio-2013