C#中有可能有1个以上返回类型的函数吗

本文关键字:返回类型 函数 可能有 1个 | 更新日期: 2023-09-27 18:24:44

我知道函数本身不能有一个以上的返回类型。我正在寻找替代方法

场景

我有一个类Product,在其中我有各种属性。我有一个类别Discounts,其中我有许多其他类别(不同类型的折扣)

折扣,无论类型如何,都是对象-因为它们都有Type(百分比/固定)和Value(十进制价格)等。每个折扣都有一个分配给它的产品,这样系统就知道要对哪个产品应用此折扣规则。

三种折扣类型:

BasicDiscountAdvancedDiscountSuperDiscount

我为每个不同的折扣都有一个List<T>,所以它们是按类型分组的。

我的目标是有一个函数,它以Product为参数,并循环查看折扣列表中的每个折扣,以检查产品是否存在。如果找到对象,我希望函数返回该对象,无论它是BasicDiscountAdvancedDiscountSuperDiscount

这是我目前工作的一个例子

假设Product X上应用了BasicDiscount

function object getDiscount(Product p){
    (UnknownType) discount;
     foreach (BasicDiscount b in BasicDiscounts)
                    if (b.Product.ID == p.ID)
                       discount = b;
     foreach (AdvancedDiscount ad in AdvancedDiscounts)
                    if (ad.Product.ID == p.ID)
                       discount = ad;
     foreach (SuperDiscount sd in SuperDiscounts)
                    if (sd.Product.ID == p.ID)
                       discount = sd;
     return discount;

}

既然我不知道该产品可以提供哪种类型的折扣,我该如何退还正确的折扣?

或者还有别的办法吗?

TLDR;-如果你必须制作一个函数,其中必须返回名称或年龄(以int或string作为数据类型),但你不知道会选择哪一个-你的函数会是什么返回类型?

非常感谢您的帮助,谢谢!:)

C#中有可能有1个以上返回类型的函数吗

接口

您可以使用每个折扣类实现的接口,然后将该接口返回给调用方法。

例如。

public interface IDiscount
{
    // method or property signatures
}
public class BasicDiscount : IDiscount
{
    // implementation of interface members
}
public IDiscount getDiscount(Product p)
{
     (IDiscount) discount;
     foreach (BasicDiscount b in BasicDiscounts)
         if (b.Product.ID == p.ID)
             discount = b;
     foreach (AdvancedDiscount ad in AdvancedDiscounts)
         if (ad.Product.ID == p.ID)
             discount = ad;
     foreach (SuperDiscount sd in SuperDiscounts)
         if (sd.Product.ID == p.ID)
             discount = sd;
     return discount;
}