首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将同一基类的不同对象传递给方法

将同一基类的不同对象传递给方法
EN

Stack Overflow用户
提问于 2012-10-25 04:40:55
回答 2查看 646关注 0票数 0

基本上,我想创建一个方法,它接受一个基类作为参数,并且可以用于派生类的“泛型”

ef-code-first类:

基类

代码语言:javascript
复制
public abstract class BaseClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

派生类:

代码语言:javascript
复制
public class DerivedA:BaseClass
{
    public string AValue {get;set;}
    ...more specific fields
}


public class DerivedB:BaseClass
{
    public string BValue {get;set;}
    ..... more specific fields
}

我使用这些稍有不同的对象调用“泛型方法”:

代码语言:javascript
复制
System.Data.Entity.DbSet<DerivedA> _dA....
System.Data.Entity.DbSet<DerivedB> _dB....

genericMethod(_dA.Where(a => a.Name.StartsWith("a name")))); //<-contains records
genericMethod(_dB.Where(a => a.Id==5)); //<---- contains records

都是"Where...“包含调试中的记录(单击枚举后)

现在的方法是:

代码语言:javascript
复制
public string genericMethod(<IQueryable>BaseClass _myClass)
{
    foreach (BaseClass c in _myClass)  // <-------class is empty - no records
        {
          // do something usefull...
        }
    return someResult 
}

但在该方法中不包含任何记录。

有没有可能,我想要做的事...?这有意义吗?

不存在设计时、编译时或运行时错误,但传递给该方法时,传递的对象不包含记录,但在调用语句中包含记录。

我做错什么了?

有没有更好的方法?

我需要这个方法,用于操作超过两个(也许十个)的派生类,因此我希望它是“泛型”的。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-10-25 04:55:47

面对这样的情况,我喜欢简化我的代码。

我会尝试从方法调用中删除_dA.Where(a => a.Name.StartsWith("a name"))_dB.Where(a => a.Id==5),并首先将它们放入变量中(然后将变量传递给方法)。

这将允许您更好地检查您的代码,并可能阐明问题。

票数 1
EN

Stack Overflow用户

发布于 2012-10-25 05:13:13

在将查询传递给方法之前,添加.ToList()以实体化查询:

代码语言:javascript
复制
genericMethod(_dA.Where(a => a.Name.StartsWith("a name"))).ToList());

否则,您并没有真正传递查询的结果,而只是传递了一个需要首先计算的查询。ToList()将为您计算它的值。当你查看调试器手表时,它基本上是在为你动态地计算它,这就是为什么你会看到返回的行。

在此之后,将您的方法更改为处理IList而不是IQueryable。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13057389

复制
相关文章

相似问题

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