给出多个值的更好方法表示相同的值(C#3.0)

时间:2010-04-29 02:42:07

标签: c# c#-3.0

我有一种情况,我正在寻找更优雅的解决方案。

考虑以下案例

"BKP","bkp","book-to-price" (will represent) BOOK-TO-PRICE

"aop","aspect oriented program" (will represent) ASPECT-ORIENTED-PROGRAM

即。如果用户输入BKP或bkp或预订价格,程序应将其视为BOOK-TO-PRICE。这同样适用于第二个例子(ASPECT-ORIENTED-PROGRAM)。

我有以下解决方案:

解决方案:

if (str == "BKP" || str == "bkp" || str == "book-to-price" ) return "BOOK-TO-PRICE".

但我认为还有许多其他更好的解决方案。

请你们给人一些建议。(举个例子会更好)

我正在使用C#3.0和dotnet framework 3.5

1 个答案:

答案 0 :(得分:3)

我会考虑使用可能从配置文件或数据库表中填充的Dictionary<string,string>,其中包含规范名称关系的别名。使用不区分大小写的键比较器。例如,

var map = new Dictionary<string,string>( StringComparer.OrdinalIgnoreCase );
map.Add( "bkp", "BOOK-TO-PRICE" );
map.Add( "book-to-price", "BOOK-TO-PRICE" );
map.Add( "aop", "ASPECT-ORIENTED-PROGRAM" );
map.Add( "aspect oriented program", "ASPECT-ORIENTED-PROGRAM" );

然后你只需要给出一个O(1)查找键来找到规范名称。

var name = map["bkp"];