调用泛型方法时如何推断参数类型?
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
列表
我有一个通用方法:
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
列表