2013-04-02 4 views
1

им интересно, что случилось с моим кодом:Может не неявного типа новообращенного «System.Collections.Generic.IEnumerable <char>» to'string

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» по-прежнему будет существовать даже «Ас» была самая короткая строка.

Кто-нибудь может мне помочь, как это сделать? благодаря!

+3

Что такое подпись 'метода RemoveFromStart'? Что он возвращает? –

+0

Параметр добавлен сэр. – Elegiac

ответ

3

IEnumerable<Char> не string, так что если вам нужен, вы можете использовать constructor:

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; 
+0

сэр я не могу понять его выход, но когда я печатаю Accep, а вместо AcceptRejectRule был вывод: AcceceptRjul ... я хочу, чтобы вся строка была уникальной ... – Elegiac

+0

@ user2234790: Извините, но я должен признать, что все еще не ясно , Возможно, это поможет, если вы покажете нам строку ввода и желаемый результат. Вы говорите, что хотите, чтобы все строки были уникальными, но есть только одна строка. Я предполагаю, что 'string []' исправлена, не так ли? –

+0

начинается с не работает sir – Elegiac

1

С Enumerable.Distinct() метод возвращает IEnumerable<T> (в данном случае IEnumerable<Char>), который явно не является string, вы можете использовать его с char[] конструктором для инициализируйте его.

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

инициализирует новый экземпляр класса Струнного до значения, указанного массива символов Unicode.

0

Вам необходимо преобразовать его в строку. Он не будет конвертироваться автоматически.

var uniqueItems = trimmed.Distinct(); 
rtb.SelectedText = new string(uniqueItems); 
0

Вы возвращающая string и используя Distinct(), чтобы получить уникальные символы, это возвращает в качестве IEnumerable<char>. Tou нужно преобразовать его обратно в string как-то, вот один метод:

rtb.SelectedText = string.Join(string.Empty, uniqueItems); 
1

Вы проверили, что Distinct возвращает в этом случае его IEnumerable<char> поэтому вы должны преобразовать то же самое в строку с помощью конструктора перегруженные char[]

так что вы можете сделать new string(trimmed.Distinct().ToArray()) и назначить его SelectedText которая ожидает строку

+0

сэр я не могу понять его выход, но когда я набираю Accep, вместо AcceptRejectRule был вывод: AcceceptRjul ... я хочу, чтобы вся строка внутри уникальной ... – Elegiac

+0

как это сделать? внутри моих строк? – Elegiac

Смежные вопросы