c# - 使用 css 为 MonthlyTrigger 选择多个月份
问题描述
我需要使用 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;
我的问题是,如何使用逗号分隔字符串中的值动态地将多个月分配给触发器。
解决方案
我不太确定,你的问题是什么。而且您没有发布触发器或枚举的代码。因此,我将提供一个带有列表的完整示例以进行比较:
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
推荐阅读
- javascript - 当我不在结束行使用分号时,为什么解构是未定义的?
- php - 以下问题需要什么 SQL 命令?
- python - mypy 是否有子类可接受的返回类型?
- node.js - 在 promise.then 和 res.send 之前未按需要修改对象字段
- google-cloud-platform - 如何在 YAML/JINJA 中基于已部署的 VM 创建实例模板
- rest - 如何使用ngrx从API发出GET请求?(Angular 7)
- node.js - 如何在 node.js 中集成 neo4j 驱动程序
- c# - 检查 db ef 6 中存在的实体“列表”
- java - 无法将存储在 firebase 中的内容查看到回收站视图
- angular - 材质树控件不显示来自 http 服务的异步数据