我是一个新手。我想做这样的事情。
private int myLoop (int start, int end, string relationalOperator)
{
int count = 0;
for (int i = start; i <= end; i++)
{
if ( X +relationalOperator+ Y)
count++;
}
return count;
}
And then do:
myLoop(1,10,>=);
这样我就可以传递一个关系运算符作为参数。如何才能做到这一点?
不,你不能这样做。参见例如 为什么不可以传递一个操作符作为参数?
然而,你 可以 传递一个委托。这实际上会更灵活,因为调用者可以使用更复杂的逻辑,而不是简单的一些比较运算符。但这通常不会是个问题。
在你的例子中,它可能看起来像这样。
private int myLoop (int start, int end, Func<int, int, bool> op)
{
int count = 0;
for (int i = start; i <= end; i++)
{
if (op(X, Y))
count++;
}
return count;
}
你会这样使用它:
myLoop(1, 10, (x, y) => x >= y);
(我不知道是什么) X
和 Y
在你原来的例子中应该代表什么,所以我只是把这些保持原样。你可以使用任何 int
值,你喜欢那里)。)
的 Func<int, int, bool>
是一个 委托 类型,它是一种函数指针。即它可以指向一个要执行的函数。这种特殊的委托类型是内置在.NET中的,它代表了任何需要两个 int
参数,并返回一个 bool
值。您也可以使用下面的命令来声明您自己的委托类型。delegate
关键字。见 代表(C#编程指南).
委托实例可以通过多种方式创建。在上面的例子中。(x, y) => x >= y
是一个 羔羊座 表达式。C#编译器将其转化为一个 匿名方法 在这个特定的例子中,它接受两个参数,并评估表达式 x >= y
使用这些参数,并返回结果。参数类型被推断为 int
由编译器根据上下文,在本例中是你要调用的方法。