C#中有可能有1个以上返回类型的函数吗
本文关键字:返回类型 函数 可能有 1个 | 更新日期: 2023-09-27 18:24:44
我知道函数本身不能有一个以上的返回类型。我正在寻找替代方法
场景
我有一个类Product
,在其中我有各种属性。我有一个类别Discounts
,其中我有许多其他类别(不同类型的折扣)
折扣,无论类型如何,都是对象-因为它们都有Type
(百分比/固定)和Value
(十进制价格)等。每个折扣都有一个分配给它的产品,这样系统就知道要对哪个产品应用此折扣规则。
三种折扣类型:
BasicDiscount
AdvancedDiscount
SuperDiscount
我为每个不同的折扣都有一个List<T>
,所以它们是按类型分组的。
我的目标是有一个函数,它以Product
为参数,并循环查看折扣列表中的每个折扣,以检查产品是否存在。如果找到对象,我希望函数返回该对象,无论它是BasicDiscount
、AdvancedDiscount
、SuperDiscount
等
这是我目前工作的一个例子
假设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作为数据类型),但你不知道会选择哪一个-你的函数会是什么返回类型?
非常感谢您的帮助,谢谢!:)
接口
您可以使用每个折扣类实现的接口,然后将该接口返回给调用方法。
例如。
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;
}