1

我想知道我的代码有什么问题:

var trimmed = RemoveFromStart(Slb, new String[]{ "ab", "Ac", "Accep", "Acces", "Accessible", "AccessibleE" });

var uniqueItems = trimmed.Distinct();

rtb.SelectedText = uniqueItems;

指向“uniqueItems”的错误。

//Replacing Parameter:
        public string RemoveFromStart(string s, IEnumerable<string> strings)
        {
        foreach (var x in strings.Where(s.StartsWith))
        {
            return s.Remove(0, x.Length);
        }
         return s;
        }

我只是希望每个字符串都是唯一的,即使“Ac”是最短的字符串,“Accep”仍然存在。

任何人都可以帮助我如何做到这一点?谢谢!

4

5 回答 5

3

AnIEnumerable<Char>不是 a string,因此如果需要,可以使用构造函数

rtb.SelectedText = new String(uniqueItems.ToArray());

如果你想在你的缩写列表中找到第一个匹配的字符串:

var abbreviations = new String[] { "ab", "Ac", "Accep", "Acces", "Accessible", "AccessibleE" };
string abbr = abbreviations.FirstOrDefault(a => Slb.StartsWith(a));
rtb.SelectedText = abbr ?? Slb;
于 2013-04-02T07:24:17.987 回答
1

由于Enumerable.Distinct()方法返回IEnumerable<T>(在这种情况下IEnumerable<Char>)显然不是 a string,因此您可以将其与char[]构造函数一起使用来初始化它。

rtb.SelectedText = new String(uniqueItems.ToArray());

将 String 类的新实例初始化为 Unicode 字符数组指示的值。

于 2013-04-02T07:25:12.270 回答
1

您是否检查了Distinct在这种情况下返回的内容,IEnumerable<char>因此您必须使用构造函数重载将其转换为字符串char[]

因此您可以执行 anew string(trimmed.Distinct().ToArray())并将其分配给期望字符串的 SelectedText

于 2013-04-02T07:27:08.800 回答
0

您需要将其转换为字符串。它不会自动转换。

var uniqueItems = trimmed.Distinct();
rtb.SelectedText = new string(uniqueItems);
于 2013-04-02T07:26:13.683 回答
0

您正在返回 astring并使用Distinct()来获取唯一字符,这将返回为IEnumerable<char>. Tou 需要将其转换回string某种方式,这是一种方法:

rtb.SelectedText = string.Join(string.Empty, uniqueItems);
于 2013-04-02T07:26:53.920 回答