无法从 'System.Collections.IList' 转换为 'System.Collections.Generic.IEnumerable<T>'

Cannot convert from 'System.Collections.IList' to 'System.Collections.Generic.IEnumerable<T>'

使用 C# 10 我正在尝试将 IEnumerable<String>? 转换为 IEnumerable<T>:

IEnumerable<String>? inputs = getValues();

if (inputs is null)
  return false;

Type type = typeof(List<>).MakeGenericType(typeof(T));

IList? outputs = (IList?)Activator.CreateInstance(type);

TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));

if (converter is null || outputs is null || !converter.CanConvertFrom(typeof(String)))
  return false;

foreach (String input in inputs) {
  if (converter.IsValid(input)) 
    outputs.Add(converter.ConvertFromString(input));
}

var texpression = new TExpression<T>(outputs);

即使我使用 outputs.ToList():

,我在最后一行仍收到错误
Cannot convert from 'System.Collections.IList' to 'System.Collections.Generic.IEnumerable<T>'

TExpression 构造函数是:

public TExpression(IEnumerable<T> values) { 
  Values = values;
}

我尝试更改我的转换代码的类型,但我总是在某个地方以错误结束。

如何解决此问题,以便在不更改构造函数的情况下使用构造函数?

更新

使用以下内容:

IList<T> outputs = (IList<T>)Activator.CreateInstance(type);
...
foreach (string input in inputs) {
  if (converter.IsValid(input)) 
    outputs.Add((T)converter.ConvertFromString(input));
}

我收到警告(我正在使用 <Nullable>enable</Nullable>):

Converting null literal or possible null value to non-nullable type.

T 可以是可空类型 (Int32?) 或非可空类型 (Int32)。

我可以将代码行更改为:

T? output = (T?)converter.ConvertFromString(input);

这修复了警告,但它是否正确?

如果 T 是不可空类型怎么办?

既然你现在实际上可以使用它的集合类型:

IList<T> outputs = (IList<T>)Activator.CreateInstance(type);
...
foreach (string input in inputs) {
    if (converter.IsValid(input)) 
        outputs.Add((T)converter.ConvertFromString(input)); // here also
}