我是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;
}
}
}
}
答案 0 :(得分:0)
更新3 为了修复第二个编译错误(请参阅更新2),您需要从列表中删除而不通过Iterator执行此操作,Iterator没有删除方法。一种方法是以下方法,它在迭代器遍历后保存索引以便删除。请注意,我以相反的顺序删除索引,以便先前删除时不会更改要删除的索引号。
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: Type
System.Collections.Generic.IEnumerator&#39;不包含Remove' and no extension method
移除&#39;的定义典型的
e`System.Collections.Generic.IEnumerator&#39;可以找到。
<强>更新强>
我已将原来的答案改为至少可以编译的内容。我所做的是将原始return (tmp <= word.Length);
更改回使用word
,这是类成员变量,而不是局部变量。
<强>原始强>
更改方法word
中变量concatOnly()
的名称:
public virtual bool concatOnly()
{
int tmp = 0;
foreach (string w in words)
{
tmp += w.Length;
}
return (tmp <= word.Length);
}
这是因为您的ConcatWord
类concatOnly
是一个成员方法,已经有一个名为word
的成员变量:internal string word;
。
仅供参考,以上显示您还需要发布ConcatWord类的完整代码。可以提供您提供的完整代码的链接,这可能会有所帮助,但重现错误所需的一切也需要在您的问题中出现在此处。