C#常量字符串调用

C#常量字符串调用,c#,C#,我制作了一些常量字符串: public const string a_sub = "S"; public const string b_sub = "Y"; public const string c_sub = "X"; public const string d_sub = "W"; // ... 我有一段文字: string str = "This is a test"; 我想做一些类似的事情: foreach(char c in str) { str.Repla

我制作了一些常量字符串:

public const string a_sub  = "S";
public const string b_sub  = "Y"; 
public const string c_sub  = "X"; 
public const string d_sub  = "W"; 
// ...
我有一段文字:

string str = "This is a test";
我想做一些类似的事情:

foreach(char c in str)
{
    str.Replace(c,c_sub);
假设c是a,那么它是:

str.Replace(c, a_sub);
如果c是d,那么它是:

str.Replace(c, d_sub);
等等

}
但是我想不出一个办法,来点帮助……好吗

在C#中,字符串是不可变的。要更改字符串的内容,需要创建一个新字符串

在您的例子中,您似乎将所有字符串的字符替换为
a_sub
,因此您可以简单地将
a_sub
字符重复n次,其中n是原始字符串的长度:

string str = "This is a test";
const char a_sub = 'S';
str = new string(a_sub, str.Length);
编辑:如果
子项
需要是字符串(而不是字符),则可以使用:

string str = "This is a test";
const string a_sub = "S";
str = string.Concat(Enumerable.Repeat(a_sub, str.Length));
在C#中,字符串是不可变的。要更改字符串的内容,需要创建一个新字符串

在您的例子中,您似乎将所有字符串的字符替换为
a_sub
,因此您可以简单地将
a_sub
字符重复n次,其中n是原始字符串的长度:

string str = "This is a test";
const char a_sub = 'S';
str = new string(a_sub, str.Length);
编辑:如果
子项
需要是字符串(而不是字符),则可以使用:

string str = "This is a test";
const string a_sub = "S";
str = string.Concat(Enumerable.Repeat(a_sub, str.Length));

使用字典和Stringbuilder:

Dictionary<char, char> mapper = new Dictionary<char, char>
{
   {'a','S'},
   {'b','D'},
   .......
};

var str = "aaaaaaaabbbbbbbb";
var sb = new StringBuilder(str);
for (int i = 0; i < sb.Length; i++)
{
    sb[i] = mapper[sb[i]];
}
var newStr = sb.ToString(); // SSSSSSSSDDDDDDDD
字典映射器=新字典
{
{'a','S'},
{'b','D'},
.......
};
var str=“aaaaaaaa bbbbbbbb”;
var sb=新的StringBuilder(str);
for(int i=0;i
使用字典和Stringbuilder:

Dictionary<char, char> mapper = new Dictionary<char, char>
{
   {'a','S'},
   {'b','D'},
   .......
};

var str = "aaaaaaaabbbbbbbb";
var sb = new StringBuilder(str);
for (int i = 0; i < sb.Length; i++)
{
    sb[i] = mapper[sb[i]];
}
var newStr = sb.ToString(); // SSSSSSSSDDDDDDDD
字典映射器=新字典
{
{'a','S'},
{'b','D'},
.......
};
var str=“aaaaaaaa bbbbbbbb”;
var sb=新的StringBuilder(str);
for(int i=0;i
在字典中定义常量

private static Dictionary<string, string> dict = new Dictionary<string, string>
{
    {"a", "S"},
    {"b", "Y"},
    {"c", "X"},
    ...
};
var str = "This is a test";
foreach (var c in dict)
{
    str = str.Replace(c.Key, c.Value);
}

在字典中定义常量

private static Dictionary<string, string> dict = new Dictionary<string, string>
{
    {"a", "S"},
    {"b", "Y"},
    {"c", "X"},
    ...
};
var str = "This is a test";
foreach (var c in dict)
{
    str = str.Replace(c.Key, c.Value);
}

只是另一种方法

通过使用反射和StringBuilder获得临时结果(这将有助于避免错误/重复的替换)

string str=“这是一个测试”;
StringBuilder结果=新建StringBuilder();
对于(int-idx=0;idx
我发现这个解决方案对于初学者来说有点复杂,但是更容易维护常量中的更改。 一个弱点…由于变量命名约定,它不会覆盖所有可能的字符

编辑


感谢@appect,因为他们的评论改进了答案,避免了不必要的伪类,这只是另一种方法

        Dictionary<char, char> GetChar = new Dictionary<char, char>()
        {
            {'a','S'},
            {'b','Y'}

        };

        string str = "This is a test";

        string newStr = "";
        for (int i = 0; i < str.Length; i++)
        {
            newStr = newStr + GetChar[str[i]];
        }
通过使用反射和StringBuilder获得临时结果(这将有助于避免错误/重复的替换)

string str=“这是一个测试”;
StringBuilder结果=新建StringBuilder();
对于(int-idx=0;idx
我发现这个解决方案对于初学者来说有点复杂,但是更容易维护常量中的更改。 一个弱点…由于变量命名约定,它不会覆盖所有可能的字符

编辑

感谢@appect,为避免不必要的伪类提供了改进答案的注释

Dictionary GetChar=newdictionary()
        Dictionary<char, char> GetChar = new Dictionary<char, char>()
        {
            {'a','S'},
            {'b','Y'}

        };

        string str = "This is a test";

        string newStr = "";
        for (int i = 0; i < str.Length; i++)
        {
            newStr = newStr + GetChar[str[i]];
        }
{ {'a','S'}, {'b','Y'} }; string str=“这是一个测试”; 字符串newStr=“”; 对于(int i=0;i
我想这就是你想要的。使用dictionary是更好的主意,newStr将返回您想要的内容。

dictionary GetChar=newdictionary()
{
{'a','S'},
{'b','Y'}
};
string str=“这是一个测试”;
字符串newStr=“”;
对于(int i=0;i

我想这就是你想要的。使用字典是更好的主意,newStr将返回您想要的内容。

似乎您希望使用类似ROT13的chiffre,但使用非顺序字典(我称之为字典,因为您的翻译不是按字母顺序排列的)

由于C#似乎缺少像Python的translate这样方便的函数:

# ... Map a to d, b to e, and c to f.
dict = str.maketrans("abc", "def")
print(dict)

# Translate this value.
value = "aabbcc"
result = value.translate(dict)
print(result)

#Output: ddeeff
您必须手动实现映射,使用字典而不是常量

请小心将翻译写入新变量,而不是替换旧变量,因为您使用的是一组无序的键,因此以后可能会替换您刚刚翻译的字符(在您的示例中,首先将“a”替换为“s”,然后将“s”替换为“h”)

使用系统;
使用系统文本;
使用System.Collections.Generic;
公开课考试
{
公共静态void Main()
{
var d=新字典
{
{'a','S'},
{'b','Y'},
{'c','X'},
{'d','W'},
{'e',