无法将 List<char> 作为参数传递给 List<object>?
Unable to pass List<char> to List<object> as a parameter?
所以我的代码中有一个方法,其中一个参数是 IEnumerable<object>
。为清楚起见,这将是该示例的唯一参数。我最初用 List<string>
变量调用它,但后来意识到我只需要 char
s 并将变量的签名更改为 List<char>
。然后我在我的程序中收到一条错误消息:
Cannot convert source type 'System.Collections.Generic.List<char>'
to target type 'System.Collections.Generic.IEnumerable<object>'.
在代码中:
// This is the example of my method
private void ConversionExample(IEnumerable<object> objs)
{
...
}
// here is another method that will call this method.
private void OtherMethod()
{
var strings = new List<string>();
// This call works fine
ConversionExample(strings);
var chars = new List<char>();
// This will blow up
ConverstionExample(chars);
}
我能想到为什么第一个可以工作,而第二个不行的唯一原因是因为 List<char>()
可以转换为 string
?我真的不认为会是这样,但这是我能做出的关于为什么这行不通的唯一猜测。
这将是我的解决方案:
// This is the example of my method
private void ConversionExample<T>(IEnumerable<T> objs)
{
...
}
// here is another method that will call this method.
private void OtherMethod()
{
var strings = new List<string>();
// This call works fine
ConversionExample<string>(strings);
var chars = new List<char>();
// This should work now
ConversionExample<char>(chars);
}
泛型参数协方差不支持值类型;它仅在泛型参数是引用类型时有效。
您可以使 ConversionExample
通用并接受 IEnumerable<T>
而不是 IEnumerable<object>
,或者使用 Cast<object>
将 List<char>
转换为 IEnumerable<object>
.
所以我的代码中有一个方法,其中一个参数是 IEnumerable<object>
。为清楚起见,这将是该示例的唯一参数。我最初用 List<string>
变量调用它,但后来意识到我只需要 char
s 并将变量的签名更改为 List<char>
。然后我在我的程序中收到一条错误消息:
Cannot convert source type 'System.Collections.Generic.List<char>'
to target type 'System.Collections.Generic.IEnumerable<object>'.
在代码中:
// This is the example of my method
private void ConversionExample(IEnumerable<object> objs)
{
...
}
// here is another method that will call this method.
private void OtherMethod()
{
var strings = new List<string>();
// This call works fine
ConversionExample(strings);
var chars = new List<char>();
// This will blow up
ConverstionExample(chars);
}
我能想到为什么第一个可以工作,而第二个不行的唯一原因是因为 List<char>()
可以转换为 string
?我真的不认为会是这样,但这是我能做出的关于为什么这行不通的唯一猜测。
这将是我的解决方案:
// This is the example of my method
private void ConversionExample<T>(IEnumerable<T> objs)
{
...
}
// here is another method that will call this method.
private void OtherMethod()
{
var strings = new List<string>();
// This call works fine
ConversionExample<string>(strings);
var chars = new List<char>();
// This should work now
ConversionExample<char>(chars);
}
泛型参数协方差不支持值类型;它仅在泛型参数是引用类型时有效。
您可以使 ConversionExample
通用并接受 IEnumerable<T>
而不是 IEnumerable<object>
,或者使用 Cast<object>
将 List<char>
转换为 IEnumerable<object>
.