C# 需要一种更有效的id比较方法吗

C# 需要一种更有效的id比较方法吗,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,所以我一直在尝试使用switch语句来创建不同的ID。我只是想知道是否有另一种有效的方法,因为身份证的数量可能会增加,我不需要太多的案例陈述 这是我目前的代码 foreach (var rl in invalidItemsLogModel) switch(rl.ErrorCategoryType) { case 1: rl.ErrorDescriptio

所以我一直在尝试使用switch语句来创建不同的ID。我只是想知道是否有另一种有效的方法,因为身份证的数量可能会增加,我不需要太多的案例陈述

这是我目前的代码

            foreach (var rl in invalidItemsLogModel)
            switch(rl.ErrorCategoryType)
            {
                case 1:
                    rl.ErrorDescription = Resources.Misc.InvalidItemGridText.ErrorMandatoryField;
                    break;
                case 2:
                    rl.ErrorDescription = Resources.Misc.InvalidItemGridText.AKACountryCodeApplied;
                    break;
                case 3:
                    rl.ErrorDescription = Resources.Misc.InvalidItemGridText.ErrorFutureIssueDate;
                    break;

                default: break;
            }

是否有其他方法可以循环使用id,而不必为每个id创建新的case语句?

使用数组作为错误文本

string[] errors = new { null, ErrorMandatoryField, 
 AKACountryCodeApplied,ErrorFutureIssueDate};

foreach (var rl in invalidItemsLogModel)
    if (rl.ErrorCategoryType < errors.Length)
        rl.ErrorDescription = error[rl.ErrorCategoryType];

如果错误代码是非连续的,则开关已经是最佳的。它将自行决定是使用表还是字典进行查找。在这种情况下,性能增益是最小的,我认为根本没有,因为switch的作用与我的代码片段完全相同。

使用数组作为错误文本

string[] errors = new { null, ErrorMandatoryField, 
 AKACountryCodeApplied,ErrorFutureIssueDate};

foreach (var rl in invalidItemsLogModel)
    if (rl.ErrorCategoryType < errors.Length)
        rl.ErrorDescription = error[rl.ErrorCategoryType];

如果错误代码是非连续的,则开关已经是最佳的。它将自行决定是使用表还是字典进行查找。在这种情况下,性能增益是最小的,我认为根本没有,因为switch的作用与我的代码片段完全相同。

您可以使用字典

var errorMessages = new Dictionary<int, String>(){
    {1, Resources.Misc.InvalidItemGridText.ErrorMandatoryField},
    ... etc
}

rl.ErrorDescription = errorMessages[ErrorCategoryType];

你可以用字典

var errorMessages = new Dictionary<int, String>(){
    {1, Resources.Misc.InvalidItemGridText.ErrorMandatoryField},
    ... etc
}

rl.ErrorDescription = errorMessages[ErrorCategoryType];

这个代码到底有什么问题?如果您必须在每个元素的categorytype之间有所不同,那么您当然需要通过循环每个元素的categoyr。当然,您可以使用一些LINQ,但是这只会隐藏复杂性。在幕后,同样的事情也会发生。你可以使用一种设计模式,比如责任链:你对这段代码到底有什么问题?如果您必须在每个元素的categorytype之间有所不同,那么您当然需要通过循环每个元素的categoyr。当然,您可以使用一些LINQ,但是这只会隐藏复杂性。在幕后,同样的事情也会发生。你可以使用一种设计模式,例如:责任链:谢谢!我已经申请了这本词典,现在看起来好多了。谢谢!我已经应用了字典,现在看起来好多了。谢谢,我会尝试用这种方式实现,看看它是如何工作的。谢谢,我会尝试用这种方式实现,看看它是如何工作的。