我正在使用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;
}
}
}
答案 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>
);