【问题标题】:Execute method of objects that are in array数组中对象的执行方法
【发布时间】:2016-05-20 04:29:48
【问题描述】:

我在 c# 中有一堆对象,它们具有共同的方法 finalPrice()。我把它们都放在一个数组中。

我想使用foreach,这样我就可以在每一个上执行finalPrice()

precioBase 是我想在每次迭代中显示的属性,但首先我必须在数组的每个对象(每个“articulo”)上使用finalPrice()

代码:

Electrodomestico articulo1 = new Electrodomestico(1000, 5,'F',"azul");
Electrodomestico articulo2 = new Electrodomestico();
Electrodomestico articulo3 = new Electrodomestico(1600, 60);         
Electrodomestico articulo4 = new Electrodomestico(3000, 90, 'J');           
Electrodomestico articulo5 = new Electrodomestico(1000, 5, 'F', "violeta");

Lavadora articulo6 = new Lavadora();
Lavadora articulo7 = new Lavadora(10, 600, 'A', "rojo", 50);

Television articulo8 = new Television();
Television articulo9 = new Television(20, 5000, 'D', "gris", true, 60);
Television articulo10 = new Television(10, 10000);

object[] electrodomestico = {articulo1,articulo2,articulo3,articulo4,articulo5,articulo6,articulo7,articulo8,articulo9,articulo10 };

foreach(double elarticulo in electrodomestico)
{

}

【问题讨论】:

  • 请粘贴格式化且正确的代码。例如,您的 foreach 语句缺少左括号。您的数组也不是您在 C# 中实例化数组的方式。 articuloX 是什么类型?如果您在设计问题时没有表现出非常基本的努力,那么您不太可能获得很多帮助。
  • 抱歉,我的英语说得不太好,也不知道如何正确说出我在寻找什么。我的程序中有 3 个类,A、B 和 C。B 和 C 都从 A 继承。我创建了这三个类的对象,它们被称为“articulos”并将它们放在一个数组中。所有这些对象都有一个共同的方法 finalPrice(),所以我想为数组中的每个对象使用该方法,不管它们来自不同的类
  • 我可以从这段代码中解释的是你的 articulo 对象只是 doubles 。所以你可以像这样使用它 foreach(double precioBase in electrodomestico) { precioBase.finalPrice(); }
  • 这与英语无关 - 与您提供给我们的代码有关。它至少应该编译,因为您的问题与编译错误无关。向我们展示您目前正在使用的实际代码。
  • 不要将object[] 用于集合,创建一个名为Product 的基类型,然后将ElectrodomesticoTelevisionLavadora 派生自它,这样您就可以使用强类型集合List<Product> 来保存您的所有产品。

标签: c# arrays object methods


【解决方案1】:

希望我不会因为提供帮助而被否决,但这是您问题的解决方案。您列出的类都应该实现一个通用接口。比如下面这个:

interface ICommonPriceFunctions
{
    double FinalPrice();
}

这样代码就知道所有实现ICommonPriceFunctions接口的类都有FinalPrice()方法。然后您需要修改您的类以实现ICommonPriceFunctions 接口并为FinalPrice() 方法编写代码。如下所示:

class Electrodomestico : ICommonPriceFunctions
{
    public double FinalPrice()
    {
        Console.WriteLine("Electrodomestico .FinalPrice()");
        return 0.0; // return whatever value you need
    }
}

您需要对所有类执行此操作并根据该类修改FinalPrice() 方法。然后只需创建一个ICommonPriceFunctions 类型的数组,遍历这些项目,然后调用FinalPrice() 方法。如下:

using System;
namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            var electrodomestico = new Electrodomestico();
            var lavadora = new Lavadora();
            var television = new Television();
            var objects = new ICommonPriceFunctions[]{ electrodomestico, lavadora, television };
            foreach(var ob in objects){
                var finalPrice = ob.FinalPrice();
            }
            Console.ReadLine();
        }
    }
}

【讨论】:

  • 对不起,我不知道我在想 Save(),它应该是 finalPrice()。我的坏
  • 您可以编辑您的答案 - 您可以将其更改为 finalPrice 而不是 Save :) - 查看答案的底部 - share edit delete flag
  • 人们真的会否决那些试图提供帮助的人吗?感谢您的帮助,如果列表不适合我,我会试试这个
  • 好的,希望我做出了正确的编辑。希望您可以使用代码作为基础来做您需要做的事情
  • 我投票支持你。我认为你正确地分析了这个问题。即不同的类没有共享接口,因此他无法运行该方法。
【解决方案2】:

您无法访问字段或方法,因为您已将数组键入为对象数组。你可以这样写:

var electrodomestico = new Electrodomestico[] { articulo1, articulo2, articulo3, articulo4, articulo5, articulo6, articulo7, articulo8, articulo9, articulo10 };

这意味着您现在有一个 Electrodomestico 数组。

对于你的 for 循环:

foreach(double elarticulo in electrodomestico)

你是说每个对象都是一个双重对象。这是不正确的——每个对象都是LavaDoraTelevision等。由于它们都继承自Electrodomestico,我们需要编写:

foreach(Electrodomestico elarticulo in electrodomestico)

但是,由于我们现在有一个类型化数组,我们不需要再次指定它(C# 可以为我们解决)

foreach(var elarticulo in electrodomestico)

我仍然不确定你的意思是什么:

precioBase 是我想在每次迭代中显示的属性,但首先我必须对数组的每个对象(每个“articulo”)使用 finalPrice()。

这是否意味着您需要运行finalPrice() 来计算值,然后通过precioBase 检索它,或者finalPrice() 是否返回precioBase 的值。

我假设finalPrice() 为我们提供了我们想要的价值。在这种情况下,我们可以这样写:

foreach(var elarticulo in electrodomestico)
{
    var finalPrice = elarticulo.finalPrice();
    Console.WriteLine(finalPrice);
}

【讨论】:

    【解决方案3】:

    我怀疑所有三种类型都可以扩展一个基本类型。
    finalPrice() 可能是这个基本类型的抽象。

    那么你可以这样写:

    mybase[] electrodomestico = {articulo1,articulo2,articulo3,articulo4,articulo5,articulo6,articulo7,articulo8,articulo9,articulo10 };
    
    var finalPrice = (from o in electrodomestico select o.finalPrice()).Sum();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多