无法将 List<char> 作为参数传递给 List<object>?

Unable to pass List<char> to List<object> as a parameter?

所以我的代码中有一个方法,其中一个参数是 IEnumerable<object>。为清楚起见,这将是该示例的唯一参数。我最初用 List<string> 变量调用它,但后来意识到我只需要 chars 并将变量的签名更改为 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>.