如何在 C# switch → case 语句中使用修改后的字符串?

问题描述 投票:0回答:1

我需要在整个应用程序的许多地方使用一个字符串,它是它的变体。例如:

String myString = "The Quick Brown Fox";

string someLowerCaseString = myString.ToLower();
string someUpperCaseString = myString.ToUpper();
string someOtherNewString = myString.Replace(' ','+');

我将此字符串放在我在整个应用程序中引用的

Constants.cs
文件中。我尝试了两种不同的方法:

public const String myString = "The Quick Brown Fox";
public static readonly String myString = "The Quick Brown Fox";

但是,当我尝试“操作”字符串以在

switch
case
语句中使用时,我无法让它工作:

switch(some_value){
    case Constants.myString.ToLower():
    case Constants.myString.ToUpper():
    case Constants.myString.Replace(' ','+'):
}

我收到错误:

CS0426: The type name 'myString' does not exist in the type 'Constants'

我什至尝试过这个:

String localString = Constants.myString.ToLower();
String localString = Constants.myString.ToUpper();
String localString = Constants.myString.Replace(' ','+');
const String localString = Constants.myString.ToLower();
const String localString = Constants.myString.ToUpper();
const String localString = Constants.myString.Replace(' ','+');
switch(some_value){
    case localString:
}

那也行不通。我收到错误:

CS9135: A constant value of type 'string' is expected

我不能使用这个:

switch(value.ToLower()){
    // ...
}

有时我需要第一个字母大写,有时我需要所有字母大写/小写。

Microsoft C# 官方文档说这些修改方法返回字符串的副本,所以我不认为我实际上是在操作 String 常量。

c# string switch-statement
1个回答
0
投票

大小写标签必须是常量,但您可以使用:

if (some_value.Equals(myString, StringComparison.CurrentCultureIgnoreCase) ||
    some_value.Equals(myString.Replace(' ', '+'), StringComparison.CurrentCultureIgnoreCase)) {
    // ...
}

其中

StringComparison
也可以是
StringComparison.OrdinalIgnoreCase
StringComparison.InvariantCultureIgnoreCase
,具体取决于您的需要。

此方法不仅适用于小写或大写字母,还适用于混合大小写。


如果将

myString
设为全部小写字符的常量,并添加第二个带有
+
符号的常量,则可以使 switch 语句起作用:

const String myString = "the quick brown fox";
const String myStringPlus = "the+quick+brown+fox";

switch (some_value.ToLower()) {
    case myString:
    case myStringPlus:
        // ...
        break;
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.