使用 css 为 MonthlyTrigger 选择多个月份

Selecting multiple months for a MonthlyTrigger using css

我需要使用 C# 应用创建计划的 windows 任务。我有一个逗号分隔的字符串,用于存储我想要 运行 执行任务的月份。该字符串包含 MonthsOfYear 类型的短值 - 例如。 “1,2,4,16,128,1024”。

我的示例表明您可以按如下方式分配由竖线分隔的多个月份:

MonthlyTrigger mt = new MonthlyTrigger();
mt.StartBoundary = Convert.ToDateTime(task.getStartDateTime());
mt.DaysOfMonth = new int[] { 10, 20 };
mt.MonthsOfYear = MonthsOfTheYear.July | MonthsOfTheYear.November;

我的问题是,如何使用逗号分隔字符串中的值动态地为触发器分配多个月份。

我不太清楚,你的问题是什么。而且您没有 post 触发器或枚举的代码。因此,我将提供一个完整的示例,其中包含用于比较的列表:

public class MonthlyTrigger
{
    [Flags] // Important because we want to set multiple values to this type
    public enum MonthOfYear
    {
        Jan = 1, // 1st bit
        Feb = 2, // 2nd bit..
        Mar = 4,
        Apr = 8,
        May = 16,
        Jun = 32,
        Jul = 64,
        Aug = 128,
        Sep = 256,
        Oct = 512,
        Nov = 1024,
        Dec = 2048
    }

    public HashSet<int> Months { get; set; } = new HashSet<int>(); // classical list to check months
    public MonthOfYear MonthFlag { get; set; } // out new type
}

public static void Main(string[] args)
{
    MonthlyTrigger mt = new MonthlyTrigger();

    string monthsFromFileOrSomething = "1,3,5,7,9,11"; // fake some string..

    IEnumerable<int> splittedMonths = monthsFromFileOrSomething.Split(',').Select(s => Convert.ToInt32(s)); // split to values and convert to integers

    foreach (int month in splittedMonths)
    {
        mt.Months.Add(month); // adding to list (hashset)

        // Here we "add" another month to our Month-Flag => "Flag = Flag | Month"
        MonthlyTrigger.MonthOfYear m = (MonthlyTrigger.MonthOfYear)Convert.ToInt32(Math.Pow(2, month - 1));
        mt.MonthFlag |= m;
    }

    Console.WriteLine(String.Join(", ", mt.Months)); // let's see our list
    Console.WriteLine(mt.MonthFlag); // what is contained in our flag?
    Console.WriteLine(Convert.ToString((int)mt.MonthFlag, 2)); // how is it binarily-stored?


    // Or if you like it in one row:
    mt.MonthFlag = 0;
    foreach (MonthlyTrigger.MonthOfYear m in monthsFromFileOrSomething.Split(',').Select(s => (MonthlyTrigger.MonthOfYear)Convert.ToInt32(s)))
        mt.MonthFlag = m;

    return;
}

在枚举中添加或删除单个标志:

MyEnumType myEnum = 1; // enum with first flag set

myEnum |= 2; // Adding the second bit. Ofcouse you can use the enum-name here "MyEnumType.MyValueForBitTwo"
// Becuase:
//   0000 0001
// | 0000 0010   "or"
// = 0000 0011

myEnum &= (int.MaxValue - 2) // Deletes the second enum-bit.
// Because:
//   0000 0011
// & 1111 1101   "and"
// = 0000 0001