sqlite - Xamarin PCL和sqlite.net

标签 sqlite xamarin.ios xamarin portable-class-library executequery

在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){


在这里,myTypeType对象,引用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/

相关文章:

Xamarin.Forms map 自动关注用户位置

python - INSERT INTO .db 不执行任何操作。为什么它不起作用?

sqlite - 在 SQLite 上使用 MicroLite

c# - 如何在 Fluent-NHibernate 中级联插入父级、子级和组合列表

c# - Xamarin:libmonosgen-2.0.dylib:MCNearbyServiceAdvertiser 上缺少所需的代码签名

android - 可绘制 xml 资源的 Xamarin.Forms Android Resources$NotFoundException

android - 为什么一些 SQLite 方法期望参数为 Object[] 而其他方法需要 String[]?

iOS/MonoTouch : Become first responder

visual-studio - 基于 Xamarin 中构建配置的 iOS/Android 项目的不同 `google-services.json/GoogleService-Info.plist`

android - 膨胀类android.support.v7.widget.FitWindowsFrameLayout时出错