Я получаю 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 этого еще не делает.