使用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是不可空类型呢?
发布于 2021-12-09 17:15:45
由于您现在实际上是集合的类型,所以可以使用它:
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
}
https://stackoverflow.com/questions/70293668
复制相似问题