有什么简单的方法可以对c#switch case语句进行排序吗?

有什么简单的方法可以对c#switch case语句进行排序吗?,c#,C#,我正在寻找一种自动化的方法来对大量的案件进行分类 switch (id) { case RadGridStringId.ClearSortingMenuItem: return "Annuler les tris"; case RadGridStringId.ConditionalFormattingMenuItem: return "Formatage conditionnel"; case RadGridStringId.Gro

我正在寻找一种自动化的方法来对大量的案件进行分类

switch (id) {
    case RadGridStringId.ClearSortingMenuItem: return "Annuler les tris";
    case RadGridStringId.ConditionalFormattingMenuItem: return "Formatage conditionnel";
    case RadGridStringId.GroupByThisColumnMenuItem: return "Grouper par cette colonne";
    case RadGridStringId.UngroupThisColumn: return "Dégrouper cette colonne";
    case RadGridStringId.ColumnChooserMenuItem: return "Masqueur de colonnes";
    case RadGridStringId.HideMenuItem: return "Masquer cette colonne";

    case RadGridStringId.ConditionalFormattingBtnApply: return "Appliquer";
    case RadGridStringId.ColumnChooserFormCaption: return "Masqueur de colonnes";
    case RadGridStringId.ColumnChooserFormMessage: return "Ajouter ici une colonne\npour la faire disparaitre\ntemporairement de la vue";
    case RadGridStringId.GroupingPanelDefaultMessage: return "Ajouter ici une colonne pour faire un regroupement par cette colonne";
    case RadGridStringId.GroupingPanelHeader: return "Groupe par";
    case RadGridStringId.ClearValueMenuItem: return "Effacer la Valeur";
    case RadGridStringId.ConditionalFormattingContains: return "Contient [Valeur1]";
    case RadGridStringId.ConditionalFormattingDoesNotContain: return "Ne contient pas [Valeur1]";
    case RadGridStringId.ConditionalFormattingEndsWith: return "Finit par [Valeur1]";
    case RadGridStringId.ConditionalFormattingEqualsTo: return "Est égal à [Valeur1]";
    case RadGridStringId.ConditionalFormattingIsBetween: return "Est compris entre [Valeur1] et [Valeur2]";
    case RadGridStringId.ConditionalFormattingIsGreaterThan: return "Est supérieur à [Valeur1]";
    case RadGridStringId.ConditionalFormattingIsGreaterThanOrEqual: return "Est supérieur ou égal à [Valeur1]";
    case RadGridStringId.ConditionalFormattingIsLessThan: return "Est inférieur à [Valeur1]";
    case RadGridStringId.ConditionalFormattingIsLessThanOrEqual: return "Est inférieur ou égal à [Valeur1]";
    case RadGridStringId.ConditionalFormattingIsNotBetween: return "Non compris entre [Valeur1] et [Valeur2]";
    case RadGridStringId.ConditionalFormattingIsNotEqualTo: return "Est différent de [Valeur1]";
    case RadGridStringId.ConditionalFormattingStartsWith: return "Commence par [Valeur1]";
    case RadGridStringId.ConditionalFormattingRuleAppliesOn: return "La règle s'applique au champ:";
    case RadGridStringId.ConditionalFormattingChooseOne: return "[Choisir un type]";
    case RadGridStringId.NoDataText: return "Pas de données à afficher";

    default:
        return base.GetLocalizedString(id);
}
有人知道在Visual Studio 2013/2015中使用的工具、附加组件或扩展吗

2015-11-12更新 其他信息: 这对我来说只是设计时的问题。我用的是遥控器。不幸的是,这些控件没有提供任何现成的控件转换。他们只提供了一个简单的解决方案

我可以在网上找到不同语言的不同文件()。但它们是不完整的,并且这些文件中案例陈述的顺序是不同的

若要查看这些文件中的差异,排序开关语句将使操作更加轻松:)

PS:另外一个很好的特性是扩展当前缺少/未使用枚举值的切换的方法

问候,,
Daniel

如注释中所述,您只需将行复制到Excel,按字母顺序对行进行排序,然后将它们粘贴回代码中即可。然而,这个大的
开关
语句将是以后维护的难点。你应该考虑另一种方法,比如使用<代码>字典< /> >

在下面的代码中,将创建包含所有文本的词典

private static Dictionary<RadGridStringId, string> texts;

private static void InitializeTexts()
{
    texts = new Dictionary<RadGridStringId, string>();
    texts[RadGridStringId.ClearSortingMenuItem] = "Annuler les tris";
    texts[RadGridStringId.ConditionalFormattingMenuItem] = "Formatage conditionnel";
    texts[RadGridStringId.GroupByThisColumnMenuItem] = "Grouper par cette colonne";
    texts[RadGridStringId.UngroupThisColumn] = "Dégrouper cette colonne";
    texts[RadGridStringId.ColumnChooserMenuItem] = "Masqueur de colonnes";
    texts[RadGridStringId.HideMenuItem] = "Masquer cette colonne";
    texts[RadGridStringId.ConditionalFormattingBtnApply] = "Appliquer";
    texts[RadGridStringId.ColumnChooserFormCaption] = "Masqueur de colonnes";
    texts[RadGridStringId.ColumnChooserFormMessage] =
        "Ajouter ici une colonne\npour la faire disparaitre\ntemporairement de la vue";
    texts[RadGridStringId.GroupingPanelDefaultMessage] =
        "Ajouter ici une colonne pour faire un regroupement par cette colonne";
    texts[RadGridStringId.GroupingPanelHeader] = "Groupe par";
    texts[RadGridStringId.ClearValueMenuItem] = "Effacer la Valeur";
    texts[RadGridStringId.ConditionalFormattingContains] = "Contient [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingDoesNotContain] = "Ne contient pas [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingEndsWith] = "Finit par [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingEqualsTo] = "Est égal à [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingIsBetween] = "Est compris entre [Valeur1] et [Valeur2]";
    texts[RadGridStringId.ConditionalFormattingIsGreaterThan] = "Est supérieur à [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingIsGreaterThanOrEqual] = "Est supérieur ou égal à [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingIsLessThan] = "Est inférieur à [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingIsLessThanOrEqual] = "Est inférieur ou égal à [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingIsNotBetween] = "Non compris entre [Valeur1] et [Valeur2]";
    texts[RadGridStringId.ConditionalFormattingIsNotEqualTo] = "Est différent de [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingStartsWith] = "Commence par [Valeur1]";
    texts[RadGridStringId.ConditionalFormattingRuleAppliesOn] = "La règle s'applique au champ:";
    texts[RadGridStringId.ConditionalFormattingChooseOne] = "[Choisir un type]";
    texts[RadGridStringId.NoDataText] = "Pas de données à afficher";
}
然后您只需使用以下方法:

private static void Main(string[] args)
{
    RadGridStringId id = RadGridStringId.GroupingPanelHeader;
    string test = getText(id);
    Console.WriteLine(test); //prints: "Groupe par"
}

不,在MS Excel或其他软件中执行。使用
字典
而不是在您展示的示例中,您可能最好使用一个数组或值字典,忘记代码开销。只需使用enum(转换为int)或字典(使用值作为键)对数组进行索引。@Lukazoid:初始化部分没有太大改进,尽管可以使用集合初始值设定项。但是字典是一个集合,因此您可以编写比使用
开关
更可读和可维护的代码。这个问题(“如何排序
开关
”)表明这是一个问题。@TimSchmelter他只希望在设计时对case语句进行排序,而不希望在运行时对条目进行排序,因此我认为这不是XY问题。如果他想对所有枚举及其相关值进行排序,我同意你的看法。问题是,询问者有一个
switch
语句,他们希望对其进行排序,但实际上他们没有提供解决方案。我同意字典更好,但在构造上确实存在一次性竞争条件。不太可能,但以后可能会有问题。您可以通过静态初始化和/或静态成员上的初始值设定项列表来缓解这种情况,这正是我所提倡的。@KevinAnderson应该改进字典的初始化-这只是一个示例,表明维护字典比维护大型排序开关语句更容易。出于兴趣,是什么让switch语句比dictionary更难维护?@LarsKristensen我仍然不明白一个未排序的dictionary如何比一个未排序的switch语句更好。以你的例子来说,很容易对同一个键使用不同值的重复索引器,而只有最后一个才有效。
private static void Main(string[] args)
{
    RadGridStringId id = RadGridStringId.GroupingPanelHeader;
    string test = getText(id);
    Console.WriteLine(test); //prints: "Groupe par"
}