在pcl Xamarin中,我需要将类型传递给函数,然后将其用于执行查询。
我尝试使用的代码是这样的:
public object sqlLeggi(string sql, Type myType){
SQLiteCommand cmd = DB.CreateCommand(sql);
var results = cmd.ExecuteQuery< myType > ();
[..]
}
但它不起作用,给我这个错误:
The type or namespace 'myType' could not be found.
有谁知道是否可以做这样的事情?
非常感谢你
最佳答案
这两个语句中的myType
扮演着非常不同的角色:
public object sqlLeggi(string sql, Type myType){
在这里,
myType
是Type
对象,引用Type class的实例。var results = cmd.ExecuteQuery< myType > ();
此处,
myType
是类型标识符,它是引用特定类型的语法构造,在这种情况下,该类型实际上被命名为myType
。现在,通常有两种方法可以解决此特定问题:
查看
cmd
中的对象类型,查看是否有ExecuteQuery
重载或替代方法采用Type
对象参数使您的方法通用,这样您就没有
Type
对象。第一种情况大概是这样写的:
var results = cmd.ExecuteQuery(myType);
第二个是这样的:
public myType sqlLeggi<myType>(string sql{
SQLiteCommand cmd = DB.CreateCommand(sql);
var results = cmd.ExecuteQuery< myType > ();
[..]
}
注意:
我使方法返回
myType
而不是object
现在将
myType
指定为方法的通用参数:sqlLeggi<myType>
在这种情况下,命名约定将指示您的通用类型参数命名为
T
或以T
开头的名称,因此,这是我的建议:public T sqlLeggi<T>(string sql{
SQLiteCommand cmd = DB.CreateCommand(sql);
var results = cmd.ExecuteQuery<T>();
[..]
}
关于sqlite - Xamarin PCL和sqlite.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609805/