gpt4 book ai didi

c# - C# 中返回类型多于 1 的函数是否可行?

转载 作者:行者123 更新时间:2023-11-30 15:23:47 24 4
gpt4 key购买 nike

我知道函数本身不能有超过 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/

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