在数组中找到最大的连接词

Find biggest concatenation word in array

我是 C# 的新手,有人可以帮助我理解为什么我的代码不起作用吗? 似乎变量 word 有问题需要返回,但我不明白是什么。

public virtual bool concatOnly()
        {
            int tmp = 0;
            foreach (string word in words)
            {
                tmp += word.Length;
            }
            return (tmp <= word.Length);
        }

我也不太明白我需要做些什么:

 public virtual void removeRepeat()
        {
            IEnumerator<string> iterator = words.GetEnumerator();
            string checkWord = null;
            while (iterator.MoveNext())
            {
                checkWord = iterator.Current;
                foreach (string tmpWord in words)
                {
                    if (tmpWord.Contains(checkWord) && checkWord.Length < tmpWord.Length)
                    {
                        iterator.Remove();
                        break;
                    }

                }
            }
        }

Here's my full code

更新 3 为了修复第二个编译错误(请参阅更新 2),您需要通过 Iterator 从列表中删除而不这样做,它没有 remove 方法。一种方法如下,它保存索引以供迭代器遍历后删除。请注意,我以相反的顺序删除索引,以便要删除的索引号不会因先前的删除而改变。

public virtual void removeRepeat()
{
    IEnumerator<string> iterator = words.GetEnumerator();
    string checkWord = null;
    List<int> removeIndexes = new List<int>();

    int i = -1;
    while (iterator.MoveNext())
    {
        checkWord = iterator.Current;
        i++;
        foreach (string tmpWord in words)
        {
            if (tmpWord.Contains(checkWord) && checkWord.Length < tmpWord.Length)
            {
                removeIndexes.Add(i);
                break;
            }

        }
    }
    removeIndexes.Reverse();
    foreach(var index in removeIndexes) {
        words.RemoveAt(index);
    }
}

更新 2

修复第一个编译错误后(请参阅下面我的原始答案,现在有效),您的代码仍然给出此编译错误 main.cs(90,38): error CS1061: TypeSystem.Collections.Generic.IEnumerator' does not contain a definition for Remove' and no extension method删除'典型值 e `System.Collections.Generic.IEnumerator' 可以找到。

更新

我已将原来的答案更改为至少可以编译的内容。我所做的是将原来的return (tmp <= word.Length);改回使用word,这是class成员变量,而不是局部变量。

原版

在方法 concatOnly() 中更改变量 word 的名称:

public virtual bool concatOnly()
{
    int tmp = 0;
    foreach (string w in words)
    {
        tmp += w.Length;
    }
    return (tmp <= word.Length);
 }

这是因为你的classConcatWord,其中concatOnly是一个成员方法,已经有一个名为word的成员变量:internal string word;

仅供参考,以上显示您还需要 post class ConcatWord 的完整代码。可以将 link 提供给您提供的完整代码,这可能会有所帮助,但是重现错误所需的一切也需要出现在您的问题中。