委托如何在C#中的数组OrderBy方法中工作?

时间:2017-07-08 00:20:25

标签: c# arrays sorting lambda delegates

我正在使用C#中的数组数据结构学习委托。请看一下我的代码。我试图在数组OrderBy()方法中扩展lambda表达式和委托,以便完全理解它是如何工作的。但即使运行结果正确,Visual Studio也会出现语法错误。如果有人可以帮我纠正“代表团3”部分,我将不胜感激。谢谢。

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

namespace Test2 {
    class Program {

        delegate int Del(int i);

        static void Main(string[] args) {

            int[] MyArray = new int[5] { 3, 2, 6, 10, -3 };

            // print original array
            foreach (var i in MyArray) {
                Console.Write(i + " ");
            }

            Console.WriteLine();
            //Console.ReadKey();

            // sort array by using either Linq or OrderBy
            // Linq works
            //int[] mynewarray = (from i in MyArray orderby i ascending select i).ToArray();

            // delegation 1 works
            //int[] mynewarray = MyArray.OrderBy(i => i).ToArray();
            // delegation 2 works
            //int[] mynewarray = MyArray.OrderBy(delegate (int i) { return i; }).ToArray();
            // delegation 3 has syntax error
            Del del = MyInt;
            int[] mynewarray = MyArray.OrderBy(del(int i)).ToArray();

            // print sorted array
            foreach (var i in mynewarray) {
                Console.Write(i + " ");
            }

            Console.ReadKey();


        }
        public static int MyInt(int i) {
            return i;
        }

    }
}

2 个答案:

答案 0 :(得分:1)

您需要指定输入标识符(在这种情况下为i)并使用“转到”(=>)运算符。

选项1:

int[] orderedArray = MyArray.OrderBy(i => del(i)).ToArray();

选项2:

int[] orderedArray = MyArray.OrderBy((int i) => del(i)).ToArray();

答案 1 :(得分:0)

这是我今天学到的。下面是一种使用委托的非常传统的方法(c#1.0)。这只是帮助我理解代表的一种方式。我实际上想在我在问题中发布的代码中使用下面的委托方式。

const todoItems = todos.map((todo, index) =>
  // Only do this if items have no stable IDs
  <li key={index}>
    {todo.text}
  </li>
);