C# 使用带有IEnumerable值的字典时,无法从用法推断方法的类型参数 使用系统; 使用System.Collections.Generic; 公开课考试 { 静态列表F(IDictionary dictionary) { // ... 返回新列表(); // ... } 公共静态void Main() { var mydict=新字典(); F(mydict); } }
在以下操作之后显示错误消息:C# 使用带有IEnumerable值的字典时,无法从用法推断方法的类型参数 使用系统; 使用System.Collections.Generic; 公开课考试 { 静态列表F(IDictionary dictionary) { // ... 返回新列表(); // ... } 公共静态void Main() { var mydict=新字典(); F(mydict); } },c#,generics,C#,Generics,在以下操作之后显示错误消息: prog.cs(16,3):错误CS0411:无法从用法中推断“Test.F(System.Collections.Generic.IDictionary)”方法的类型参数。尝试显式指定类型参数 编译失败:1个错误,0个警告 IDictionary在值类型中是不变的,因此IDictionary不是IDictionary,即使LinkedList是IEnumerableIDictionary在值类型中是不变的,因此,IDictionary不是IDictionary,即
prog.cs(16,3):错误CS0411:无法从用法中推断“Test.F(System.Collections.Generic.IDictionary)”方法的类型参数。尝试显式指定类型参数
编译失败:1个错误,0个警告
IDictionary
在值类型中是不变的,因此IDictionary
不是IDictionary
,即使LinkedList
是IEnumerable
IDictionary
在值类型中是不变的,因此,IDictionary
不是IDictionary
,即使LinkedList
是IEnumerable
Dictionary
不是字典Dictionary
不是字典该代码是不正确的,因为您将其声明为IEnumerable
,但您是给它一个LinkedList
,如果编译的代码是列表,那么您就可以将列表
填入传递给该方法的字典中。如果您将mydict
声明更改为同时使用IEnumerable
,则代码将编译。此代码不正确,因为您将其声明为使用IEnumerable
,但您给了它一个LinkedList
,如果编译了代码,则可以将列表
填充到传递给该方法的字典中。如果将mydict
声明更改为同时使用IEnumerable
,则代码将编译。
using System;
using System.Collections.Generic;
public class Test
{
static List<T> F<T>(IDictionary<int, IEnumerable<T>> dictionary)
{
// ...
return new List<T>();
// ...
}
public static void Main()
{
var mydict = new Dictionary<int, LinkedList<int>>();
F(mydict);
}
}
prog.cs(16,3): error CS0411: The type arguments for method `Test.F<T>(System.Collections.Generic.IDictionary<int,System.Collections.Generic.IEnumerable<T>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly
Compilation failed: 1 error(s), 0 warnings
static List<T> F<T, U>(IDictionary<int, U> dictionary) where U : IEnumerable<T>
F<int, LinkedList<int>>(mydict);