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

How to infer argument type when calling a generic method?

我有一个通用方法:

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

我正在尝试通过以下方式调用它:

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

但是,我在调用 ToDataTable 的行中收到错误 "The types of arguments cannot be inferred from the usage. Try specifying the type arguments specifically."。

LeagueFixtures class 的结构是:

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 时,我可以访问结果。

您的 ToDataTable 接受一个列表,并且您试图将一个类型为 LeagueFixtures 的对象(这是反序列化方法返回的对象)传递给它。您可以使用 myVar 变量创建一个新列表以传递到 ToDataTable:

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

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

编辑

关于您访问​​ myVar.fixtures.result 的问题 - 您不能这样做,因为 myVar.fixtures 是一个 List<LeagueFixtures> 并且您需要在其中的一个对象上调用 .result列表