使用方法更新列表?

时间:2011-10-25 03:04:04

标签: c# visual-studio-2010

这是关于方法的一个非常简单的问题。我是C#的新手,正在测试列表。如何调用方法“addTwo”以便它将“标记”列表中的每个元素更新两个?请注意,我已经创建了这个方法(在主方法下面进一步向下滚动)。我只是想知道如何在main方法中调用它。

namespace ParallelLists
    {
        class Program
        {
            static void Main(string[] args)
            {
                //create an list of 4 student names
                List<string> names = new List<string>(4);
                names.Add("Matt");
                names.Add("Mark");
                names.Add("Luke");
                names.Add("John");

                //create a list of 4 integers representing marks
                List<decimal> marks = new List<decimal>(4);
                marks.Add(88m);
                marks.Add(90m);
                marks.Add(55m);
                marks.Add(75m);


                Console.WriteLine("the mark of " + names[0] + " is : " + marks[0]);
                Console.ReadLine();

                //Upgrade everyone by 2 marks
               ...   
            }

            public List<decimal> addTwo(List<decimal> mark)
            {
                List<decimal> temp = mark;
                for (int i = 0; i < temp.Count; i++)
                {
                    temp[i] += 2m;
                }
                return temp;
            }
        }
    }

3 个答案:

答案 0 :(得分:3)

您需要使方法保持静态,因为您正在访问非对象。您还需要使用返回的值更新标记集合。你实际上不需要返回List,因为列表是可变的。

class Program
{
    static void Main(string[] args)
    {
        //create an list of 4 student names
        List<string> names = new List<string>(4);
        names.Add("Matt");
        names.Add("Mark");
        names.Add("Luke");
        names.Add("John");

        //create a list of 4 integers representing marks
        List<decimal> marks = new List<decimal>(4);
        marks.Add(88m);
        marks.Add(90m);
        marks.Add(55m);
        marks.Add(75m);


        marks = addTwo(marks);

        Console.WriteLine("the mark of " + names[0] + " is : " + marks[0]);
        Console.ReadLine();

        Console.Read();

    } 

    public static List<decimal> addTwo(List<decimal> mark)
        {
            List<decimal> temp = mark;
            for (int i = 0; i < temp.Count; i++)
            {
                temp[i] += 2m;
            }
            return temp;
        }
}

如果您不想返回列表,可以执行以下操作:

class Program
    {
        static void Main(string[] args)
        {
            //create an list of 4 student names
            List<string> names = new List<string>(4);
            names.Add("Matt");
            names.Add("Mark");
            names.Add("Luke");
            names.Add("John");

            //create a list of 4 integers representing marks
            List<decimal> marks = new List<decimal>(4);
            marks.Add(88m);
            marks.Add(90m);
            marks.Add(55m);
            marks.Add(75m);


            addTwo(marks);

            Console.WriteLine("the mark of " + names[0] + " is : " + marks[0]);
            Console.ReadLine();

            Console.Read();

        }

        public static void addTwo(List<decimal> mark)
        {
            List<decimal> temp = mark;
            for (int i = 0; i < temp.Count; i++)
            {
                temp[i] += 2m;
            }

        }
    }

答案 1 :(得分:1)

您的列表已经获得了对“标记”的引用,当您正在执行的任何操作将在同一列表中运行时,为什么会返回任何内容。

而不是:


public List<decimal> addTwo(List<decimal> mark)
{
   List<decimal> temp = mark;
   for (int i = 0; i < temp.Count; i++)
   {
       temp[i] += 2m;
   }
   return temp;
}

I would do:


public void addTwo(List<decimal> mark)
{
   for (int i = 0; i < mark.Count; i++)
   {
      temp[i] += 2m;
   }
}

然后在您的代码调用中就像

一样
addTwo(mark);

我会将它重命名为AddTwo以适应正常的c#约定。

答案 2 :(得分:0)

//Upgrade everyone by 2 marks
var plustwo = addTwo(marks);
Console.WriteLine("the mark of " + names[0] + " is : " + plustwo[0]);
Console.ReadLine();

注意,您还需要使AddTwo成为静态方法:

  public static List<decimal> addTwo(List<decimal> mark)