具有多个 return 值的谓词
Predicate with multiple return values
我正在做家庭作业,我的老师问了这个我不知道如何回答的问题:
使用 Predicate 委托编写一个 Lambda 表达式,双精度作为 a
参数并返回 bool、double 和 string 作为值,则不能使用元组。
我知道在 C# 中 "return multiple values" 的唯一方法是使用元组,我在这里不能这样做,或者使用 out 参数。我试图创建一个带有 out 参数的谓词,但要么语法错误,要么我只需要用不同的方式来做。这是我的尝试,供参考。
public static void Main()
{
double outDouble = 1.0;
string outString = "string";
Predicate<double, out double, out string> pred =
(double dVal, out double outDouble, out string outString) =>
{
if (dVal <= 1.0)
{
outDouble = 1.0;
outString = "string";
return true;
}
else
{
outDouble = 0.0;
outString = "";
return false;
}
};
bool predBool = pred(2.0, out outDouble, out outString);
WriteLine(predBool);
ReadKey(true);
}
请帮助找到这个问题的答案。 :)
您可以通过关闭它们来改变 lambda 中的变量,而不是将它们作为参数或作为 return 值显式传递。
double outDouble = 1.0;
string outString = "string";
Predicate<double> pred = dVal =>
{
if (dVal <= 1.0)
{
outDouble = 1.0;
outString = "string";
return true;
}
else
{
outDouble = 0.0;
outString = "";
return false;
}
};
bool predBool = pred(2.0);
WriteLine(predBool);
ReadKey(true);
我正在做家庭作业,我的老师问了这个我不知道如何回答的问题:
使用 Predicate 委托编写一个 Lambda 表达式,双精度作为 a
参数并返回 bool、double 和 string 作为值,则不能使用元组。
我知道在 C# 中 "return multiple values" 的唯一方法是使用元组,我在这里不能这样做,或者使用 out 参数。我试图创建一个带有 out 参数的谓词,但要么语法错误,要么我只需要用不同的方式来做。这是我的尝试,供参考。
public static void Main()
{
double outDouble = 1.0;
string outString = "string";
Predicate<double, out double, out string> pred =
(double dVal, out double outDouble, out string outString) =>
{
if (dVal <= 1.0)
{
outDouble = 1.0;
outString = "string";
return true;
}
else
{
outDouble = 0.0;
outString = "";
return false;
}
};
bool predBool = pred(2.0, out outDouble, out outString);
WriteLine(predBool);
ReadKey(true);
}
请帮助找到这个问题的答案。 :)
您可以通过关闭它们来改变 lambda 中的变量,而不是将它们作为参数或作为 return 值显式传递。
double outDouble = 1.0;
string outString = "string";
Predicate<double> pred = dVal =>
{
if (dVal <= 1.0)
{
outDouble = 1.0;
outString = "string";
return true;
}
else
{
outDouble = 0.0;
outString = "";
return false;
}
};
bool predBool = pred(2.0);
WriteLine(predBool);
ReadKey(true);