如何在调用泛型方法时推断参数类型?

时间:2015-02-12 19:17:44

标签: c# generics

我有一个通用的方法:

public static DataTable ToDataTable<T>(List<T> data)

我试图通过以下方式打电话给它:

var myVar= JsonConvert.DeserializeObject<LeagueFixtures>(url);
DataTable myDataTable = ToDataTable(myVar);

但是我收到错误“无法根据用法推断出参数的类型。请尝试专门指定类型参数。”在我调用ToDataTable的行上。

LeagueFixtures类的结构是:

public class Fixtures
{
    public string leagueName { get; set; }
    public List<LeagueFixtures> fixtures { get; set; }       
}

public class LeagueFixtures
{
    public string date { get; set; }
    public int matchday { get; set; }
    public FixtureResult result { get; set; }
}

public class FixtureResult
{
    public int goalsHome { get; set; }
    public int goalsAway { get; set; }
}

如果我完成了,我可以让它工作:

var myVar= JsonConvert.DeserializeObject<Fixtures>(url);
DataTable myDataTable = ToDataTable(myVar.fixtures);

但是我无法通过执行myVar.fixtures.result来访问结果,而当直接进入LeagueFixtures时我可以访问结果。

1 个答案:

答案 0 :(得分:3)

你的ToDataTable接受一个List,你试图传递一个LeagueFixtures类型的对象(这是deserialize方法返回的对象)。您可以使用myVar变量创建一个新列表以传递到ToDataTable:

DataTable myDataTable = ToDataTable<LeagueFixtures>(new List<LeagueFixtures>{myVar});

注意,此时<LeagueFixtures>是不必要的,因为可以推断出类型。

修改

关于您访问​​myVar.fixtures.result的问题 - 您无法做到这一点,因为myVar.fixtures是List<LeagueFixtures>,您需要在该列表中的对象上调用.result < / p>