【发布时间】:2015-06-16 16:05:50
【问题描述】:
有没有办法遍历枚举或检索它在枚举列表中的位置。我有以下示例代码。
private static void Main(string[] args)
{
DateTime sinceDateTime;
Counters counter = new Counters();
// Iterate through time periods
foreach (TimePeriodsToTest testTimePeriod in Enum.GetValues(typeof(TimePeriodsToTest)))
{
// e.g. DateTime lastYear = DateTime.Now.AddDays(-365);
sinceDateTime = DateTime.Now.AddDays((double)testTimePeriod);
var fileCount =
Directory.EnumerateFiles("c:\\Temp\\")
.Count(path => File.GetCreationTime(path).Date > sinceDateTime);
Console.WriteLine("Files since " + -(double)testTimePeriod + " days ago is : " + fileCount);
// counter.TimePeriodCount[testTimePeriod] = fileCount;
}
}
public enum TimePeriodsToTest
{
LastDay = -1,
LastWeek = -7,
LastMonth = -28,
LastYear = -365
}
public class Counters
{
public int[] TimePeriodCount = new int[4];
}
public class Counters2
{
public int LastDay;
public int LastWeek;
public int LastMonth;
public int LastYear;
}
所以我想将值 fileCount 存储到 counter.TimePeriodCount[] 中。如果我能得到testTimePeriod 的“位置值”,那么它将很好地插入数组counter.TimePeriodCount[]。但我还没有弄清楚如何做到这一点。
如果 LastDay、LastWeek 等是 1、2、3、4,那么这不是问题,但它们不是,我有问题!
或者,是否有办法在后续迭代中将fileCount 存储到Counters2.LastDay、Counters2.LastWeek 等?
或者我只是以错误的方式接近这个?
更新 “KuramaYoko”给出的建议可以通过在解决方案中添加字典来实现,但我发现 Jones6 给出的解决方案更优雅,因为它不需要添加字典。感谢您的时间和精力,因为我从两个答案中都学到了一些东西:-)
Update2 现在我明白了应该使用AlexD解决方案的方式,这也是解决问题的一个很好的方式。谢谢。
【问题讨论】:
-
感谢您的建议。我能够让它以这种方式工作,但我必须建立一个字典来解决这个问题。 Jones6 的答案更短,对我来说更优雅地解决了这个问题。但是感谢您的建议,因为我从未想过将字典用作可能的解决方案。