在静态void函数C#中传递一个参数

时间:2014-02-09 01:12:21

标签: c# function void

我正在尝试编写一个C#函数来确定数组中的最大值并通过引用传递它。

这是我第一次使用C#进行编程,但它确实让我烦恼,因为我似乎无法在主要版本中正确分配它。

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

namespace ConsoleApplication4
{
    class Program
    {
        static void Maxim(int n, ref int maxim, params int[] v) {
            int i,  max=v[0];

            for (i = 0; i < n; i++) {
                if (v[i] >  max)  max = v[i];
            }
        }

        static void Main()
        {
            int[] vector = new int[10];
            int n, i;
            int maximul;

            Console.WriteLine("Introduceti numarul de elemente: ");
            n = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Valoarea introdusa: {0}", n);
            for (i = 0; i < n; i++) {
                vector[i] = Int32.Parse(Console.ReadLine());
            }

            Console.WriteLine("Elementele introduse sunt: ");
            for (i = 0; i < n; i++) {
                Console.WriteLine("Elementul {0}:  {1}", i + 1, vector[i]);
            }

            Maxim(n, ref maximul, vector);

            Console.WriteLine("Maximul din vector: {0}",  maximul);
            Console.ReadLine();
        }
    }
}

它返回以下错误:Use of unassigned local variable

3 个答案:

答案 0 :(得分:3)

定义变量时初始化变量:

int n = 0, i = 0;
int maximul = 0;

原因可能是您将maximul作为参考参数传递,但您没有对其进行初始化。

来自documentation

  

传递给 ref 参数的参数在传递之前必须初始化。这与out参数不同,out参数在传递之前不必显式初始化。

答案 1 :(得分:0)

Maxim是一个冗余变量。你永远不会在你的功能中使用它。

答案 2 :(得分:0)

问题是最大值存储在本地max中,但调用者希望将其写入ref参数maxim。如果您删除本地max并使用maxim,则可以解决问题。

编写此函数的一种更惯用的方法是根本不使用ref参数。而只是直接返回值

static intMaxim(int n, params int[] v) {
  int i,  max=v[0];
  for (i = 0; i < n; i++) {
    if (v[i] >  max)  max = v[i];
  }
  return max;
}

请注意,此处并不真正需要n参数。可以通过表达式v

访问数组v.Length的长度