我目前正在使用此合同检查参数和返回值是否不为空。现在,我需要一种方法来检查无论它采用哪个开关分支,生成的 IEnumerable 都不能在其代码值上有重复项。这是否可能使用代码合同。我尝试使用 Contract.ForAll 但没有运气。
internal static IEnumerable<MenuItemAction> GetMenuActions(MenuItem menuItem)
{
Contract.Requires(menuItem != null);
Contract.Ensures(Contract.Result<IEnumerable<MenuItemAction>>() != null);
switch (menuItem.Code)
{
case 0:
return new MenuItemAction[3] {
new MenuItemAction(){Code = 0, Label = "."},
new MenuItemAction(){Code = 1, Label = ".."},
new MenuItemAction(){Code = 2, Label = "..."}
};
case 1:
return new MenuItemAction[2] {
new MenuItemAction(){Code = 3, Label = "."},
new MenuItemAction(){Code = 4, Label = ".."}
};
case 2:
return new MenuItemAction[2] {
new MenuItemAction(){Code = 5, Label = "."},
new MenuItemAction(){Code = 6, Label = ".."}
};
default: return null;
}
}