我想知道我的代码有什么问题:
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;
}
我只希望每个字符串都是唯一的,就像“Accep”仍然存在,即使“Ac”是最短的字符串。
任何人都可以帮我解释怎么做?谢谢!
答案 0 :(得分:3)
IEnumerable<Char>
不是string
,因此如果您需要rtb.SelectedText = new String(uniqueItems.ToArray());
,可以使用constructor:
var abbreviations = new String[] { "ab", "Ac", "Accep", "Acces", "Accessible", "AccessibleE" };
string abbr = abbreviations.FirstOrDefault(a => Slb.StartsWith(a));
rtb.SelectedText = abbr ?? Slb;
如果要在缩写列表中找到第一个匹配的字符串:
{{1}}
答案 1 :(得分:1)
由于Enumerable.Distinct()
方法返回IEnumerable<T>
(在这种情况下为IEnumerable<Char>
),但不是string
,您可以将其与char[]
构造函数一起初始化它
rtb.SelectedText = new String(uniqueItems.ToArray());
将String类的新实例初始化为指示的值 由一系列Unicode字符组成。
答案 2 :(得分:1)
您是否检查了Distinct
在这种情况下返回IEnumerable<char>
的内容,因此您必须使用char[]
的构造函数重载将其转换为字符串
所以你可以做一个new string(trimmed.Distinct().ToArray())
并将它分配给期望字符串的SelectedText
答案 3 :(得分:0)
您需要将其转换为字符串。它不会自动转换。
var uniqueItems = trimmed.Distinct();
rtb.SelectedText = new string(uniqueItems);
答案 4 :(得分:0)
您将返回string
并使用Distinct()
获取唯一字符,这将返回IEnumerable<char>
。 Tou需要以某种方式将其转换回string
,这是一种方法:
rtb.SelectedText = string.Join(string.Empty, uniqueItems);