1

我将有需要,在pcl Xamarin,传递给函数的类型,然后用于执行查询。 ,我试图使用的代码是这样的:Xamarin PCL和sqlite.net

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

请注意,这与可移植类库,xamarin,monotouch,executequery或sqlite无关。这只是“Type”对象和泛型类型参数之间的混淆。 –

回答

1

两个语句myType扮演着截然不同的角色:

public object sqlLeggi(string sql, Type myType){ 

这里,myTypeType对象,引用Type class的一个实例。

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

这里,myType类型标识符,这是一种语法结构指的是特定类型的,一个实际上是命名myType在这种情况下。

现在,有通常为两个来处理这一特定问题的方法:

  1. 中只看cmd对象类型,看看是否有,需要一个Type对象参数,而不是
  2. 过载或替代方法 ExecuteQuery
  3. 使您的方法通用,以便您没有Type对象开始。

第一种情况大概也是这样写的:

var results = cmd.ExecuteQuery(myType); 

这样第二:

public myType sqlLeggi<myType>(string sql{ 
    SQLiteCommand cmd = DB.CreateCommand(sql); 
    var results = cmd.ExecuteQuery<myType>(); 
    [..] 
} 

需要注意的是:

  1. 我所做的方法返回myType而不是object
  2. myType现在指定为泛型参数的方法:sqlLeggi<myType>

在这种情况下命名约定将决定你的泛型类型参数被命名为TT所以这里开始的东西是我的建议:

public T sqlLeggi<T>(string sql{ 
    SQLiteCommand cmd = DB.CreateCommand(sql); 
    var results = cmd.ExecuteQuery<T>(); 
    [..] 
} 
+0

这正是我将如何回答它。我希望我可以多劳多得。 – valdetero