属性或索引器不能分配给:: string2 [i] = sting1 [i]

时间:2013-10-08 10:19:17

标签: c#

using System;

namespace stringdouble
{
    public class populate
    {
        public string string1;
        public string string2;

        public populate (string string1 ,string string2)
        {
            for (int i=1; i < string1.Length; i++)
            {
                if (string1[i] == string1[i-1])
                {
                    string2[i] = string1[i];//error on this line
                    Console.WriteLine ("Character Copied");
                    Console.ReadKey();
                    Console.Clear();
                }
            }

            Console.WriteLine (string2);
        }
    }

这是代码,但由于某种原因,它给了我上面输入的错误。我试图删除字符串中的重复项并将它们复制到一个新的。

我在new populate(FirstString, SecondString);打电话给你。

4 个答案:

答案 0 :(得分:7)

字符串是不可变的,因此一旦创建它们就无法在不创建新字符串的情况下修改它们。这就是当你尝试从字符串修改字符时得到异常的原因。

您可以使用Linq仅获取唯一字符:

string uniqueCharacters = new string(string1.Distinct().ToArray());

或者,如果你想要一个新字符串中的所有重复字符:

var dupChars = string1.GroupBy(c => c)
   .Where(g => g.Count() > 1)
   .Select(g => g.First());
string dupliateCharacters = new string(dupChars.ToArray());

正如BartozKP所提到的,也许你想要创建一个相等的相邻字符串。以下是使用StringBuilder和循环的可能实现:

public string Populate(string text)
{
    StringBuilder sb = new StringBuilder();
    if(text.Length > 1)
    {
        for (int i = 1; i < text.Length; i++)
        { 
            Char c = text[i];
            if (c == text[i - 1])
                sb.Append(c);
        }
    }
    return sb.ToString();
}

答案 1 :(得分:4)

您可以使用String#ToCharArray()将字符串转换为字符数组。 在您的代码中:

char[] chars1 = string1.ToCharArray();
....
string result = new string(chars);

答案 2 :(得分:2)

string是.NET Framework中String的别名。 .NET String是不可变的。将string2设为StringBuilder类的对象,以使代码正常工作。

答案 3 :(得分:0)

一个没有实际功能的工作版本:

public class populate
{
    public populate (string string1 ,string string2)
    {
        char[] result = string2.ToCharArray();

        for (int i=1; i < string1.Length; i++)
        {
            if (string1[i] == string1[i-1])
            {
                result[i] = string1[i];
                Console.WriteLine ("Character Copied");
                Console.ReadKey();
                Console.Clear();
            }
        }

        string2 = new string(result);

        Console.WriteLine (string2);
    }

基于HimBromBeere提供的答案。但是,这不会删除string1中的所有重复项。如果您真的想这样做,请参阅TimSchmelter的回答。