gpt4 book ai didi

c# - 理解泛型与继承类的结合

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:01 25 4
gpt4 key购买 nike

这是一个与another one I asked相关的问题这是特定于 NHibernate 的,但我开始认为我的问题可能远比这更基本。

由于NHibernate相关的原因,我有一个基础抽象类(Listing)和继承自它的类(Listing_UKListing_US等)。
它们在功能上是相同的。
我明白为什么这不起作用:

List<Listing> test = new List<Listing_UK>();

现在我正在做类似的事情:

List<Listing> test = new List<Listing>();
test.Add(new Listing_UK() as Listing);

这行得通,但我需要这些类更容易互换,就像上面那样。

我明白我所做的事情背后的基本思想有点奇怪,但是有人有什么建议吗?

编辑:

显然,我的示例过于抽象了。
我试图避免使它太过 NHibernate-specific 以便它实际上与我的其他问题不同(并且因为我认为我要问的是更基本的),但我基本上想要实现的是这个:

IQueryOver<Listing,Listing> test = null;
if(condition) {
test = DBSession.QueryOver<Listing_UK>();
} else {
test = DBSession.QueryOver<Listing_US>();
}
test.Where(l => l.Field == "value").List<Listing>();

从我收到的 react 来看,我有理由相信我所要求的是不可能的。

最佳答案

无需在您的代码中使用“as”。这将正常工作:

List<Listing> test = new List<Listing>();
test.Add(new Listing_UK());

目前还不清楚您需要做什么而您还不能做什么。你真的需要一个List<Listing_UK>吗? ?这里的大局是什么?如果您可以显示一些不起作用的代码,那将会有所帮助。

编辑:好的,既然您已经解释了更多,我怀疑您想要一个通用方法:

List<Listing> list = condition ? QueryList<Listing_UK>() 
: QueryList<Listing_US>();

private static List<Listing> QueryList<T>() where T : Listing
{
return DBSession.QueryOver<T>()
.Where(l => l.Field == "value")
.List<Listing>();
}

我对 NHibernate 的了解不够深,不知道这是否足够,但如果不够,我相信您可以稍微调整一下。

您最初只是试图互换地处理类型的想法实际上是行不通的。

关于c# - 理解泛型与继承类的结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4829797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com