无法将类型'System.Collections.Generic.IEnumerable <char>'隐式转换为字符串</char>

时间:2013-04-02 07:21:58

标签: c#

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

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”是最短的字符串。

任何人都可以帮我解释怎么做?谢谢!

5 个答案:

答案 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);