无法从 '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
}
使用 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
}