在方法中将关系运算符作为参数传递
Pass Relational Operator as an argument in Method
我是新手。我想做类似的事情:
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;
}
然后做:
myLoop(1,10,>=);
所以我可以将关系运算符作为参数传递。这怎么可能?
不,你不能。参见例如Why is it not possible to pass an operator as an argument?
但是,您可以通过委托。这实际上会更灵活,因为调用者可以使用比简单的一些比较运算符更复杂的逻辑。但这通常不会成为问题。
在您的示例中,它可能看起来像这样:
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>
是一个delegate类型,是一种函数指针。 IE。它可以指向要执行的函数。该特定委托类型内置于 .NET 中,代表任何采用两个 int
参数和 returns 一个 bool
值的方法。您还可以使用 delegate
关键字声明您自己的自定义委托类型。参见 Delegates (C# Programming Guide)。
可以通过多种方式创建委托实例。在上面的示例中,(x, y) => x >= y
是一个 lambda 表达式。 C# 编译器将其转换为一个 匿名方法 ,在此特定示例中,该方法采用两个参数,使用这些参数计算表达式 x >= y
,并计算结果 returns。参数类型由编译器根据上下文推断为 int
,在本例中为您正在调用的方法。
我是新手。我想做类似的事情:
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;
}
然后做:
myLoop(1,10,>=);
所以我可以将关系运算符作为参数传递。这怎么可能?
不,你不能。参见例如Why is it not possible to pass an operator as an argument?
但是,您可以通过委托。这实际上会更灵活,因为调用者可以使用比简单的一些比较运算符更复杂的逻辑。但这通常不会成为问题。
在您的示例中,它可能看起来像这样:
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>
是一个delegate类型,是一种函数指针。 IE。它可以指向要执行的函数。该特定委托类型内置于 .NET 中,代表任何采用两个 int
参数和 returns 一个 bool
值的方法。您还可以使用 delegate
关键字声明您自己的自定义委托类型。参见 Delegates (C# Programming Guide)。
可以通过多种方式创建委托实例。在上面的示例中,(x, y) => x >= y
是一个 lambda 表达式。 C# 编译器将其转换为一个 匿名方法 ,在此特定示例中,该方法采用两个参数,使用这些参数计算表达式 x >= y
,并计算结果 returns。参数类型由编译器根据上下文推断为 int
,在本例中为您正在调用的方法。