Указанное приведение недопустимо - IEnumerable to T, где T: IEnumerable - PullRequest
0 голосов
/ 24 октября 2019

Я получаю InvalidCastException для универсального метода, который я пишу. То, что я пытаюсь сделать, это привести IEnumerable к T, который является IEnumerable . После некоторого прочтения, это, вероятно, невозможно, но я был бы признателен, если бы кто-то смог это подтвердить.

Вот мой код:

public static T ToIdentifiers<T>(this T enumerable, string enclosingType, bool allowDuplicates) where T : IEnumerable<string>
{
    enumerable = (T)enumerable.Select(it => it.ToIdentifier(enclosingType));

    if(allowDuplicates)
        return enumerable;

    List<string> uniqueIdentifiers = new List<string>();
    using(var enumerator = enumerable.GetEnumerator())
    {
        while(enumerator.MoveNext())
        {
            int? index = null;

            while(uniqueIdentifiers.Contains(enumerator.Current + index))
                index++;

            uniqueIdentifiers.Add(enumerator.Current + index);
        }
    }

    return (T)uniqueIdentifiers.AsEnumerable();
}

В идеальном мире это позволило быnew string[]{}.ToIdentifiers() для возврата строки [] и new List<string>().ToIdentifiers() для возврата List , но я полагаю, теперь я понимаю, почему Linq этого еще не делает.

...