【问题标题】:Getting result as Array以数组形式获取结果
【发布时间】:2018-05-19 11:49:11
【问题描述】:

我们正在学习如何使用 Stream Reader,但我遇到了一些方法问题,实际上当我尝试获取返回值时它不起作用。

static void FindeMinMaxVerkauf(Verkauf[] arr, out Verkauf min, out Verkauf max)
{

    double min2 = 10000;
    double max2 = 0;
    int min3 = 0;
    int max3 = 0;

    for (int i = 0; i < arr.Length; i++)
    {
        if((arr[i].StückPreis * arr[i].Stückzahl) < min2)
        {
            min2 = arr[i].StückPreis * arr[i].Stückzahl;
            min3 = i;
        }
        if ((arr[i].StückPreis * arr[i].Stückzahl) > max2)
        {
            max2 = arr[i].StückPreis * arr[i].Stückzahl;
            max3 = i;
        }
    }
    min = arr[min3];
    max = arr[max3];
}

这就是我试图获取返回值的方式

double min,max;
FindeMinMaxVerkauf(alle, out min, out max);
Console.WriteLine("Verkäufe mit kleinsten Preis " + min + "Verkäufe mit größten Preis" + max );

但它说

CS1503 参数 "3": Konvertierung von "out double" in "out _61_T_Shirts.Verkauf" nicht möglich.

这意味着从double 转换为Tshirts...不可能。我真的不知道如何解决它。

  1. 这是我的第二种方法:

    static Verkauf FindeHöchsteStückzahl(Verkauf[] arr)
    {
        int anz = 0;
        int pos = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            if(arr[i].Stückzahl > anz)
            {
                anz = arr[i].Stückzahl;
                pos = i;
            }
        }
        return arr[pos];
    }
    

这就是我试图获取返回值的方式:

FindeHöchsteStückzahl(alle);
Console.WriteLine("Höchste Stückzahl: " + alle );

但我得到了 Array 结果:

Höchste Stückzahl: _61_T_Shirts.Verkauf[]
  1. 我的意思是:

    static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe)
    {
        int j = 0;
        Verkauf[] finderverk = new Verkauf[10000];
        for (int i = 0; i < arr.Length; i++)
        {
            if(arr[i].Farbe == farbe)
            {
                finderverk[j] = arr[i];
                j++;
            }
        }
        Array.Resize(ref finderverk, j);
        return finderverk;
    }
    

    } }

我需要帮助;D

【问题讨论】:

  • 我不知道你可以在 c# 中使用德语字符。:)
  • out Verkauf min 不是 out double min - 而且您似乎也没有实现 implicit 转换
  • 是的,通常不会,但我们可以:D
  • @UnholySheep 我在这 2-3 种方法之前做过,我使用了相同的方法,但这个我不明白
  • static void FindeMinMaxVerkauf(Verkauf[] arr, out Verkauf min, out Verkauf max) -> static void FindeMinMaxVerkauf(Verkauf[] arr, out double min, out double max)。我非常怀疑你用不同的方法做了这个完全相同的代码,它也不会在那里工作。因此,除非您可以提供 minimal reproducible example 来证明这一点,否则这就是您的答案

标签: c# arrays methods


【解决方案1】:

第一个问题。为什么不只是效仿并声明min 以及max 是Verkauf?

Verkauf min, max; // Verkauf, not double
FindeMinMaxVerkauf(alle, out min, out max);

// String interpolation - $"... {value} ..." is more readable
// We have min and max of type Verkauf; we want to print out StückPreis: 
Console.WriteLine(
  $"Verkäufe mit kleinsten Preis {min.StückPreis} Verkäufe mit größten Preis {max.StückPreis}");

第二个问题。您必须保存 FindeHöchsteStückzahl 调用的结果,然后显示它,而不是初始数组:

// Save the result of the method call (sorry for the umlaut)
var hoch = FindeHöchsteStückzahl(alle);

// ... and print out the result (hoch), not the initial array 
// If you haven't implement `ToString()` in the Verkauf class
// You, probably, don't want {hoch} but {hoch.StückPreis}:
// Console.WriteLine($"Höchste Stückzahl: {hoch.StückPreis}");  
Console.WriteLine($"Höchste Stückzahl: {hoch}"); 

编辑:如果你想返回一个数组,即Verkauf[](第一和第二个问题合并):

// Array: 1st item is min, 2nd one is max
static Verkauf[] MinMaxVerkauf(Verkauf[] value) {
  Verkauf min, max; 
  FindeMinMaxVerkauf(alle, out min, out max);

  return new Verkauf[] {min, max};
} 

...

var minmax = MinMaxVerkauf(alle);

Console.WriteLine(
  $"Verkäufe mit kleinsten Preis {minmax[0].StückPreis} Verkäufe mit größten Preis {minmax[1].StückPreis}");

编辑 2:当您想要查询您的数据(找出一些 Farbe 的最大 StückPreis)时,请尝试使用 Linq 专门为此目的设计的:

using System.Linq;

...

// See how it's easy (the third problem in the question):
static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe) {
  return arr
    .Where(stuck => stuck.Farbe == farbe)
    .ToArray();  
}

...

string farbe = "Rot";

double max = alle
  .Where(stuck => stuck.Farbe == farbe)
  .Max(stuck => stuck.StückPreis); 

double min = alle
  .Where(stuck => stuck.Farbe == farbe)
  .Min(stuck => stuck.StückPreis); 

Console.WriteLine(
  $"Farbe {farbe}: Verkäufe mit kleinsten Preis {min.StückPreis} Verkäufe mit größten Preis {max.StückPreis}");

【讨论】:

  • 感谢第一个工作,但第二个没有你有我可以联系到你的电子邮件吗?
  • @Kevin Garnick:我明白了;如果您还没有在Verkauf 类中实现ToString() 方法(即.net 不知道如何打印出 Verkauf 实例),则必须明确说明:@987654335 @。您可以在我的个人资料中查看我的电子邮件
  • 谢谢,当我在 Methode 中有 Array 并且我想返回 Array 时,我还有 1 个问题,我应该怎么做? static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe) 并且返回是 return finderverk;
  • @Kevin Garnick:有一个 array 你也想输出数组,你可以这样做:static Verkauf[] SomeMethod(Verkauf[] value) {/*implementation*/}
  • 我的问题形成了我的问题,我想像 1. 和 2. 方法一样获得返回值(输出)
【解决方案2】:

尝试使用 Linq。

它是内置的,并且确实使代码更具可读性:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var ar = new Buy[]{
            new Buy(){Price = 1, Name = "shirt"}, 
            new Buy(){Price = 2, Name = "hat"}, 
            new Buy(){Price = 3, Name = "dog"}
        };

        Console.WriteLine(ar.OrderByDescending(b => b.Price).First().Name);
        Console.WriteLine(ar.OrderBy(b => b.Price).First().Name);
    }

    internal class Buy{
        public int Price;
        public string Name;
    }
}

打印:

dog
shirt

这应该会引导您朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多