C# 在同一类中调用方法

C# 在同一类中调用方法,c#,methods,C#,Methods,我正在编写一个简单的程序来生成一个值数组并对其执行一些基本计算。我在从主方法中调用我的“平均值”和“中值”方法时遇到问题。我在下面附上了编译器错误。多谢各位 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { class arraymod

我正在编写一个简单的程序来生成一个值数组并对其执行一些基本计算。我在从主方法中调用我的“平均值”和“中值”方法时遇到问题。我在下面附上了编译器错误。多谢各位

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
    class arraymod
    {
        static void Main(string[] args)
        {
            int[] values;
            values = new int[10];
            Random rand = new Random();
            for (int i = 0; i < 10; i++)
            {
                values[i] = rand.Next(1,20);
            }

            Array.Sort(values);
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(values[i]);
            }
            Console.WriteLine("Min: {0}", values.Min());
            Console.WriteLine("Max: {0}", values.Max());
            Console.WriteLine("Sum: {0}", values.Sum());
            Console.WriteLine("Mean: {0}", values.Mean()); //program fails here
            Console.WriteLine("Median: {0}", values.Median());
        }
        public int Mean(int[] arr)
        {
            int valuesMean = arr.Sum()/arr.Count();
            return valuesMean;
        }
        public int Median(int[] arr)
        {
            int valuesMedian = (arr.Max()+ arr.Min())/2;
            return valuesMedian;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间控制台应用程序4
{
类数组
{
静态void Main(字符串[]参数)
{
int[]值;
数值=新整数[10];
Random rand=新的Random();
对于(int i=0;i<10;i++)
{
值[i]=rand.Next(1,20);
}
数组。排序(值);
对于(int i=0;i<10;i++)
{
Console.WriteLine(值[i]);
}
WriteLine(“Min:{0}”,values.Min());
WriteLine(“Max:{0}”,values.Max());
WriteLine(“Sum:{0}”,values.Sum());
WriteLine(“Mean:{0}”,values.Mean());//程序在此失败
WriteLine(“Median:{0}”,values.Median());
}
公共整数平均值(整数[]arr)
{
int valuesMean=arr.Sum()/arr.Count();
返回值表;
}
公共整数中值(整数[]arr)
{
int-valuesMedian=(arr.Max()+arr.Min())/2;
返回值媒体;
}
}
}
arraymod.cs(29,42):

错误CS1061:“System.Array”不包含的定义 “Mean”和无扩展方法“Mean”接受第一个参数
找不到类型“System.Array”(是否缺少using指令 或程序集引用?)

1) 您需要调用
均值(值)
中值(值)

2) Main是一种静态方法,而Mean和Median是实例方法。创建arraymod的实例并调用它们:

var inst = new arraymod();
int mean = inst.Mean(values);
int median = inst.Median(values);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
class arraymod
{
    static void Main( string[] args )
    {
        int[] values;
        values = new int[ 10 ];
        Random rand = new Random();
        for( int i = 0 ; i < 10 ; i++ )
        {
            values[ i ] = rand.Next( 1 , 20 );
        }

        Array.Sort( values );
        for( int i = 0 ; i < 10 ; i++ )
        {
            Console.WriteLine( values[ i ] );
        }
        Console.WriteLine( "Min: {0}" , values.Min() );
        Console.WriteLine( "Max: {0}" , values.Max() );
        Console.WriteLine( "Sum: {0}" , values.Sum() );
        Console.WriteLine( "Mean: {0}" , Mean( values ) ); //call
        Console.WriteLine( "Median: {0}" , Median( values ) );//call
    }
    //make method "Mean" static
    public static int Mean( int[] arr )
    {
        int valuesMean = arr.Sum() / arr.Count();
        return valuesMean;
    }
    //make method "Median" static
    public static int Median( int[] arr )
    {
        int valuesMedian = ( arr.Max() + arr.Min() ) / 2;
        return valuesMedian;
    }
}
}
或者,将方法设置为静态:

public static int Mean(int[] arr)
public static int Median(int[] arr)
1) 您需要调用
均值(值)
中值(值)

2) Main是一种静态方法,而Mean和Median是实例方法。创建arraymod的实例并调用它们:

var inst = new arraymod();
int mean = inst.Mean(values);
int median = inst.Median(values);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
class arraymod
{
    static void Main( string[] args )
    {
        int[] values;
        values = new int[ 10 ];
        Random rand = new Random();
        for( int i = 0 ; i < 10 ; i++ )
        {
            values[ i ] = rand.Next( 1 , 20 );
        }

        Array.Sort( values );
        for( int i = 0 ; i < 10 ; i++ )
        {
            Console.WriteLine( values[ i ] );
        }
        Console.WriteLine( "Min: {0}" , values.Min() );
        Console.WriteLine( "Max: {0}" , values.Max() );
        Console.WriteLine( "Sum: {0}" , values.Sum() );
        Console.WriteLine( "Mean: {0}" , Mean( values ) ); //call
        Console.WriteLine( "Median: {0}" , Median( values ) );//call
    }
    //make method "Mean" static
    public static int Mean( int[] arr )
    {
        int valuesMean = arr.Sum() / arr.Count();
        return valuesMean;
    }
    //make method "Median" static
    public static int Median( int[] arr )
    {
        int valuesMedian = ( arr.Max() + arr.Min() ) / 2;
        return valuesMedian;
    }
}
}
或者,将方法设置为静态:

public static int Mean(int[] arr)
public static int Median(int[] arr)
您正在对数组实例调用
Mean()
。如果该平均值计算与LINQ
Average
不同,请为其定义扩展方法。 例如:

您正在对数组实例调用
Mean()
。如果该平均值计算与LINQ
Average
不同,请为其定义扩展方法。 例如:


问题是,如果需要扩展方法,则需要在第一个参数之前使用关键字
this
,将方法设为静态,并将方法放入静态类中

static class arraymod
{
    public static int Mean(int[] arr)
    {
        int valuesMean = arr.Sum()/arr.Count();
        return valuesMean;
    }

    public static int Median(int[] arr)
    {
        int valuesMedian = (arr.Max()+ arr.Min())/2;
        return valuesMedian;
    }
}
就个人而言,我不会费心创建
Mean
方法,因为
Average
已经做了同样的事情。通过计算一个循环中的所有内容,而不是分别迭代数组的多个Linq调用,可以提高代码的效率

static void Main(string[] args)
{
    int[] values;
    values = new int[10];
    Random rand = new Random();
    for (int i = 0; i < 10; i++)
    {
        values[i] = rand.Next(1,20);
    }

    int sum = 0;
    int max = int.MinValue;
    int min = int.MaxValue;
    Array.Sort(values);
    for (int i = 0; i < 10; i++)
    {
        sum += values[i];
        if(values[i] < min)
        {
            min = values[i];
        }

        if(values[i] > max)
        {
            max = values[i];
        }

        Console.WriteLine(values[i]);
    }
    Console.WriteLine("Min: {0}", min);
    Console.WriteLine("Max: {0}", max);
    Console.WriteLine("Sum: {0}", sum);
    Console.WriteLine("Mean: {0}", sum/values.Length); 
    Console.WriteLine("Median: {0}", (min + max)/2);
}
static void Main(字符串[]args)
{
int[]值;
数值=新整数[10];
Random rand=新的Random();
对于(int i=0;i<10;i++)
{
值[i]=rand.Next(1,20);
}
整数和=0;
int max=int.MinValue;
int min=int.MaxValue;
数组。排序(值);
对于(int i=0;i<10;i++)
{
总和+=数值[i];
if(值[i]max)
{
最大值=数值[i];
}
Console.WriteLine(值[i]);
}
WriteLine(“Min:{0}”,Min);
WriteLine(“Max:{0}”,Max);
WriteLine(“Sum:{0}”,Sum);
WriteLine(“Mean:{0}”,sum/values.Length);
WriteLine(“中位数:{0}”,(最小+最大)/2);
}

还要注意的是,均值和中值的计算使用整数除法,这将导致截断。

问题是,如果需要扩展方法,则需要在第一个参数之前使用关键字
this
,将该方法设为静态,并将该方法放入静态类中

static class arraymod
{
    public static int Mean(int[] arr)
    {
        int valuesMean = arr.Sum()/arr.Count();
        return valuesMean;
    }

    public static int Median(int[] arr)
    {
        int valuesMedian = (arr.Max()+ arr.Min())/2;
        return valuesMedian;
    }
}
就个人而言,我不会费心创建
Mean
方法,因为
Average
已经做了同样的事情。通过计算一个循环中的所有内容,而不是分别迭代数组的多个Linq调用,可以提高代码的效率

static void Main(string[] args)
{
    int[] values;
    values = new int[10];
    Random rand = new Random();
    for (int i = 0; i < 10; i++)
    {
        values[i] = rand.Next(1,20);
    }

    int sum = 0;
    int max = int.MinValue;
    int min = int.MaxValue;
    Array.Sort(values);
    for (int i = 0; i < 10; i++)
    {
        sum += values[i];
        if(values[i] < min)
        {
            min = values[i];
        }

        if(values[i] > max)
        {
            max = values[i];
        }

        Console.WriteLine(values[i]);
    }
    Console.WriteLine("Min: {0}", min);
    Console.WriteLine("Max: {0}", max);
    Console.WriteLine("Sum: {0}", sum);
    Console.WriteLine("Mean: {0}", sum/values.Length); 
    Console.WriteLine("Median: {0}", (min + max)/2);
}
static void Main(字符串[]args)
{
int[]值;
数值=新整数[10];
Random rand=新的Random();
对于(int i=0;i<10;i++)
{
值[i]=rand.Next(1,20);
}
整数和=0;
int max=int.MinValue;
int min=int.MaxValue;
数组。排序(值);
对于(int i=0;i<10;i++)
{
总和+=数值[i];
if(值[i]max)
{
最大值=数值[i];
}
Console.WriteLine(值[i]);
}
WriteLine(“Min:{0}”,Min);
WriteLine(“Max:{0}”,Max);
WriteLine(“Sum:{0}”,Sum);
WriteLine(“Mean:{0}”,sum/values.Length);
WriteLine(“中位数:{0}”,(最小+最大)/2);
}

还要注意,平均值和中值的计算使用整数除法,这将导致截断。

这不是一种扩展方法。您需要将方法设置为静态并调用它们:

var inst = new arraymod();
int mean = inst.Mean(values);
int median = inst.Median(values);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
class arraymod
{
    static void Main( string[] args )
    {
        int[] values;
        values = new int[ 10 ];
        Random rand = new Random();
        for( int i = 0 ; i < 10 ; i++ )
        {
            values[ i ] = rand.Next( 1 , 20 );
        }

        Array.Sort( values );
        for( int i = 0 ; i < 10 ; i++ )
        {
            Console.WriteLine( values[ i ] );
        }
        Console.WriteLine( "Min: {0}" , values.Min() );
        Console.WriteLine( "Max: {0}" , values.Max() );
        Console.WriteLine( "Sum: {0}" , values.Sum() );
        Console.WriteLine( "Mean: {0}" , Mean( values ) ); //call
        Console.WriteLine( "Median: {0}" , Median( values ) );//call
    }
    //make method "Mean" static
    public static int Mean( int[] arr )
    {
        int valuesMean = arr.Sum() / arr.Count();
        return valuesMean;
    }
    //make method "Median" static
    public static int Median( int[] arr )
    {
        int valuesMedian = ( arr.Max() + arr.Min() ) / 2;
        return valuesMedian;
    }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间控制台应用程序4
{
类数组
{
静态void Main(字符串[]参数)
{
int[]值;
数值=新整数[10];
Random rand=新的Random();
对于(int i=0;i<10;i++)
{
值[i]=rand.Next(1,20);
}
数组。排序(值)