有没有办法返回作为子类的类型?

用户875234

我想要一个基本上做到这一点的函数:

public static Type GetProductType(int id)
{
    var typeString = db.GetTypeString(id);
    return Type.GetType(typeString);
}

我想像这样使用:

public static Product GetProduct(int id)
{
    var productType = GetProductType(id);
    return db.Table<productType>()
        .Single(p => p.Id == id);
}

但问题出p.id.Single(p => p.id == id). 代码不知道 p(即 productType)具有 id 属性。因此,我能想到的一种使这项工作有效的方法是将Type由 返回的GetProductType约束为Product( 具有 Id 属性)的子类

它是这样设置的,因为我使用的是 sql-net-pcl(xamarin 的 sqliite)并且无法访问实体框架。我需要一种映射到表的类型,然后才能进行任何查询。我没有为每种产品类型编写相同的代码,而是尝试为其编写代码Product,然后根据产品的 id 查找特定的产品类型。

再见 StackExchange

实现一个基本接口,您可以在其中定义您的产品具有一个Id属性:

public interface IProduct
{
    int Id { get; set; }
}

定义您的实际类,并确保它们实现IProduct

public class FruitProduct : IProduct
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Variety { get; set; }
}

public class CerealProduct : IProduct
{
    public int Id { get; set; }
    public string Brand { get; set; }
    public int SugarContent { get; set; }
}

和您的最终查找,它将指定它是一种类型IProduct(从而使您可以访问 Id 字段,该字段应该出现在 anyFruitProductCerealProduct您发送到ProductLookup

public class ProductLookup<T> where T : IProduct
{
    public static T GetProduct(int id)
    {
        // var productType = GetProductType(id);
        //You can pass either FruitProduct or CerealProduct here (Although, you will ONLY
        //be able to access Id here, as this function only knows it's an IProduct)
        return this.db<T>()
            .Single(p => p.Id == id);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法将C ++数据类型作为变量返回?

来自分类Dev

Java:有没有办法在枚举中获取具有不同返回类型的方法?

来自分类Dev

有没有办法声明作为派生类类型的抽象基类的成员?

来自分类Dev

PHP:有没有办法获取方法的返回类型?

来自分类Dev

有没有办法在C ++函数体内定义返回类型?

来自分类Dev

有没有办法找出从 ByteArrayInputStream 返回的字节类型?

来自分类Dev

有没有办法告诉方法它应该返回什么值类型?

来自分类Dev

有没有办法引用类型的构造函数?

来自分类Dev

有没有办法从IO monad解开类型?

来自分类Dev

有没有办法从IO monad解开类型?

来自分类Dev

有没有办法返回Future [Unit]?

来自分类Dev

有没有办法让枚举返回UIViewController

来自分类Dev

有没有办法建立返回值?

来自分类Dev

有没有办法从基类访问子类的字段/变量?有道理吗?

来自分类Dev

有没有办法检索PL / SQL存储过程返回的列名和数据类型?

来自分类Dev

有没有办法提供单个宏函数来返回不同类型的值,包括什么都不包含?

来自分类Dev

有没有办法在不使用void指针的情况下返回C函数中的任何类型?

来自分类Dev

在 C++ 中使用成员函数向量时,有没有办法实现协变返回类型?

来自分类Dev

有没有办法动态更新子类中的变量?

来自分类Dev

有没有办法用父类的名称空间/类空间来引用子类?

来自分类Dev

有没有办法在JPA中重写实体子类中的ID?

来自分类Dev

有没有办法将超类obj更改为子类obj?

来自分类Dev

有没有办法实例化子类而不继承特定属性?

来自分类Dev

有没有办法让 Generic 对象没有 Generic 类型?

来自分类Dev

有没有办法在几个月内没有数据返回0?

来自分类Dev

有没有办法为所有操作为 CancellationToken 创建过滤器?

来自分类Dev

有没有办法使Rust确信特定的关联类型与具体类型相同?

来自分类Dev

有没有办法确定传入的变量是引用类型还是值类型?

来自分类Dev

有没有办法从其完整类型中获取模板类的类型?

Related 相关文章

  1. 1

    有没有办法将C ++数据类型作为变量返回?

  2. 2

    Java:有没有办法在枚举中获取具有不同返回类型的方法?

  3. 3

    有没有办法声明作为派生类类型的抽象基类的成员?

  4. 4

    PHP:有没有办法获取方法的返回类型?

  5. 5

    有没有办法在C ++函数体内定义返回类型?

  6. 6

    有没有办法找出从 ByteArrayInputStream 返回的字节类型?

  7. 7

    有没有办法告诉方法它应该返回什么值类型?

  8. 8

    有没有办法引用类型的构造函数?

  9. 9

    有没有办法从IO monad解开类型?

  10. 10

    有没有办法从IO monad解开类型?

  11. 11

    有没有办法返回Future [Unit]?

  12. 12

    有没有办法让枚举返回UIViewController

  13. 13

    有没有办法建立返回值?

  14. 14

    有没有办法从基类访问子类的字段/变量?有道理吗?

  15. 15

    有没有办法检索PL / SQL存储过程返回的列名和数据类型?

  16. 16

    有没有办法提供单个宏函数来返回不同类型的值,包括什么都不包含?

  17. 17

    有没有办法在不使用void指针的情况下返回C函数中的任何类型?

  18. 18

    在 C++ 中使用成员函数向量时,有没有办法实现协变返回类型?

  19. 19

    有没有办法动态更新子类中的变量?

  20. 20

    有没有办法用父类的名称空间/类空间来引用子类?

  21. 21

    有没有办法在JPA中重写实体子类中的ID?

  22. 22

    有没有办法将超类obj更改为子类obj?

  23. 23

    有没有办法实例化子类而不继承特定属性?

  24. 24

    有没有办法让 Generic 对象没有 Generic 类型?

  25. 25

    有没有办法在几个月内没有数据返回0?

  26. 26

    有没有办法为所有操作为 CancellationToken 创建过滤器?

  27. 27

    有没有办法使Rust确信特定的关联类型与具体类型相同?

  28. 28

    有没有办法确定传入的变量是引用类型还是值类型?

  29. 29

    有没有办法从其完整类型中获取模板类的类型?

热门标签

归档