代码之家  ›  专栏  ›  技术社区  ›  matt

如何在c#中的字符串索引处设置字符?

c#
  •  21
  • matt  · 技术社区  · 15 年前
    someString[someRandomIdx] = 'g';
    

    会给我一个错误。

    如何实现上述目标?

    6 回复  |  直到 5 年前
        1
  •  49
  •   Matt Ellen Bipin Vayalu    15 年前

    如果它是 string

    为了实现你的愿望,你可以使用 StringBuilder

    StringBuilder someString = new StringBuilder("someString");
    
    someString[4] = 'g';
    

    更新

    为什么要使用 一串 字符串拼接 ? 有很多原因。以下是我能想到的:

    • 访问字符串的值更快。
    • 字符串可以被插入(这种情况并不总是发生),因此如果您创建一个具有相同值的字符串,那么就不会使用额外的内存。
    • 字符串是不可变的,因此它们在基于哈希的集合中工作得更好,而且本质上是线程安全的。
        2
  •  34
  •   Mehrdad Afshari    15 年前

    C#字符串是不可变的。您应该用修改后的内容创建一个新字符串。

     char[] charArr = someString.ToCharArray();
     charArr[someRandomIdx] = 'g'; // freely modify the array
     someString = new string(charArr); // create a new string with array contents.
    
        3
  •  6
  •   polfosol à° _à°    7 年前

    因为没有人提到一行解决方案:

    someString = someString.Remove(index, 1).Insert(index, "g");
    
        4
  •  3
  •   Alexey Zadorozhny    9 年前

    如果必须更改字符串的现有实例,有一种方法 不安全的

            public static unsafe void ChangeCharInString(ref string str, char c, int index)
            {
                GCHandle handle;
                try
                {
                    handle = GCHandle.Alloc(str, GCHandleType.Pinned);
                    char* ptr = (char*)handle.AddrOfPinnedObject();
                    ptr[index] = c;
                }
                finally
                {
                    try
                    {
                        handle.Free();
                    }
                    catch(InvalidOperationException)
                    {
                    }
                }
            }
    
        5
  •  1
  •   advait    15 年前

    退房 this article 字符串是不可变的,因此必须先将其转换为中间对象,然后才能对其进行修改。

        6
  •  0
  •   Lily Finley    6 年前

    如果你愿意介绍 Also(...) :

    public static T Also<T>(this T arg, Action<T> act) { act(arg); return arg; }
    
    public static string ReplaceCharAt(this string str, int index, char replacement) =>
        new string(str.ToCharArray().Also(arr => arr[index] = replacement));
    
        7
  •  -1
  •   ajay_whiz    7 年前

    你也可以使用 Insert() 方法,例如。 somestring.Insert(index,data)