我知道函数本身不能有超过 1 个返回类型。我正在寻找替代品。
场景
我有一个类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 作为它们的数据类型),但您不知道将选择哪一个 - 您的函数将返回什么类型是吗?
非常感谢帮助,谢谢! :)
最佳答案
接口(interface)!
您可以使用每个折扣类实现的接口(interface),然后只需将接口(interface)返回给调用方法即可。
例如。
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;
}
关于c# - C# 中返回类型多于 1 的函数是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949355/