gpt4 book ai didi

c# - 了解抽象类的子类型

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

我在使用 Table per Hierarchy 时设计服务层时遇到问题使用 Entity Framework 设置。我的问题是我得到了一个特定类型的对象,但我想检查该类型是什么。这在代码中有更好的解释:

抽象域类

public abstract class Order
{
public string OrderId { get; set; }
}

继承类

public class OrderProduct : Order
{
public List<OrderDetail> OrderDetails { get; set; }
}

public class OrderSubscription : Order
{
public decimal Fee { get; set; }
public DateTime? EndDate { get; set; }
}

所以你基本上可以这样做:

orderRepository.GetOrders();
//OR
orderRepository.GetOrders().OfType<OrderProduct>();
//OR
orderRepository.GetOrders().OfType<OrderSubscription>();

我基本上使用第一个。它返回 IQueryable<Order>

我想创建 1 个服务层方法来调用获取任何类型,例如:

public Order GetOrder(string orderId)
{
return orderRepository.GetOrders().FirstOrDefault(o => o.OrderId == orderId);
}

问题

在我的 Controller 中,我如何在调用 GetOrder(string orderId) 后判断对象的类型? ?如果是 OrderProduct 类型, 然后我还需要导航属性 ( List<OrderDetail> ) 在我转换时存在。

我看到的一个解决方案是为每个 Order 调用两种类型的服务层调用类(class)。调用1,如果返回null,则调用另一个。但是在 C# 中是否有 OOP 方法来执行此操作?

最佳答案

我不完全确定你在问什么,但我认为你正在寻找 is 运算符:

Order order = //...    
bool isSubscription = order is OrderSubscription;

此外,如果你想使用之后的值,你也可以使用 as ,这将转换它或返回 null 它不是类型。

Order order = //...
OrderSubscription subscription = order as OrderSubscription;
if (subscription != null)
{
// use subscription
}

关于c# - 了解抽象类的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218874/

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