Xamarin PCL和sqlite.net

时间:2014-03-24 12:45:45

标签: 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.

有谁知道是否有可能做这样的事情?

非常感谢

1 个答案:

答案 0 :(得分:1)

两个陈述中的myType扮演着截然不同的角色:

public object sqlLeggi(string sql, Type myType){

此处,myTypeType对象,引用Type class的实例。

var results = cmd.ExecuteQuery< myType > ();

此处,myType类型标识符,它是一个引用特定类型的语法结构,实际上是名称 {{1}在这种情况下。

现在,通常有两种方法可以解决这个问题:

  1. 查看myType中的对象类型,看看cmd是否存在重载或替代方法,而是采用ExecuteQuery对象参数
  2. 使您的方法具有通用性,以便您不会有Type对象开始。
  3. 第一种情况可能是以这种方式写的:

    Type

    第二个是这样的:

    var results = cmd.ExecuteQuery(myType);
    

    请注意:

    1. 我让方法返回public myType sqlLeggi<myType>(string sql{ SQLiteCommand cmd = DB.CreateCommand(sql); var results = cmd.ExecuteQuery< myType > (); [..] } 而不是myType
    2. object现在被指定为方法的通用参数:myType
    3. 在这种情况下,命名约定会指定您的泛型类型参数名为sqlLeggi<myType>或以T开头的内容,所以这是我的建议:

      T