首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin与sqlite.net

Xamarin与sqlite.net
EN

Stack Overflow用户
提问于 2014-03-24 12:45:44
回答 1查看 721关注 0票数 1

在pcl Xamarin中,我需要将一个类型传递给函数,然后使用它来执行查询。我试图使用的代码如下:

代码语言:javascript
复制
public object sqlLeggi(string sql, Type myType){
 SQLiteCommand cmd = DB.CreateCommand(sql);
 var results = cmd.ExecuteQuery< myType > ();
[..]
}

但是它不起作用,给我这个错误:

代码语言:javascript
复制
The type or namespace 'myType' could not be found.

有没有人知道是否有可能做这样的事?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-24 13:45:59

这两个语句中的myType扮演着非常不同的角色:

代码语言:javascript
复制
public object sqlLeggi(string sql, Type myType){

在这里,myType是一个Type对象,引用类型类的一个实例。

代码语言:javascript
复制
var results = cmd.ExecuteQuery< myType > ();

在这里,myType是一个类型标识符,它是一个引用特定类型的语法结构,在本例中它实际上将被命名为myType

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

  1. 查看cmd中的对象类型,看看是否存在ExecuteQuery的重载或替代方法,该方法采用Type对象参数。
  2. 使您的方法泛化,这样您就没有Type对象了。

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

代码语言:javascript
复制
var results = cmd.ExecuteQuery(myType);

第二个是这样的:

代码语言:javascript
复制
public myType sqlLeggi<myType>(string sql{
    SQLiteCommand cmd = DB.CreateCommand(sql);
    var results = cmd.ExecuteQuery< myType > ();
    [..]
}

请注意:

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

在本例中,命名约定将要求您的泛型类型参数命名为T或以T开头的内容,下面是我的建议:

代码语言:javascript
复制
public T sqlLeggi<T>(string sql{
    SQLiteCommand cmd = DB.CreateCommand(sql);
    var results = cmd.ExecuteQuery<T>();
    [..]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22609805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档