我正在创建一个捐赠应用程序,该应用程序将读取文本框中的输入,并将其转换为double。然后使用方法operatingCost
,它应该将转换后的double值除以17%(营业费)。当前在该方法中,我进入了变量dontationBFees
,然后将其除以17,然后创建一个新变量afterFees
。我遇到的问题是我需要在该项目中通过ref,而我似乎无法访问afterFees
变量。我需要获取参考文献afterFees
并将其显示在我的afterFeesBox
上。我的按钮on_click
中也有此方法。任何帮助将不胜感激。下面是我的代码:
private Double donationBFees = 0;
private void button1_Click(object sender, EventArgs e)
{
String donationBeforeFees;
Double aFees;
String totalDonationRaised;
donationBeforeFees = donationBox.Text;
donationBFees = System.Convert.ToDouble(donationBeforeFees);
void operatingCost(ref double afterFees)
{
afterFees = (donationBFees / 17);
}
afterFeesBox.Text = operatingCost(ref afterFees);
}
答案 0 :(得分:0)
调用byref会更改传递给函数的值,因此您需要传递一个您不介意更改的变量。
在此示例中,我有两件事叫做afterFees,因此我将其重命名为显而易见的一件事是参数。
contentForm cf = contentFrame.Content as contentForm;
if (cf != null)
{
cf.Method();
}
您应该告诉您的教授,这实际上不是byref参数的好用法。如果该功能扣除了运营成本,则可能更有意义:
private Double donationBFees = 0;
void operatingCost(ref double afterFeesParam)
{
afterFeesParam = (afterFeesParam / 17);
}
private void button1_Click(object sender, EventArgs e)
{
String donationBeforeFees;
Double aFees;
String totalDonationRaised;
donationBeforeFees = donationBox.Text;
donationBFees = System.Convert.ToDouble(donationBeforeFees);
double afterFees = donationBFees;
operatingCost(ref afterFees);
afterFeesBox.Text = afterFees;
}
这样,您可以给它一个值,然后返回的值会变小。
答案 1 :(得分:0)
一些(希望有帮助)的事情:
Promise
这意味着您要传递对app.get('/' , async (req, res) => {
res.json(await members)
console.log('Members: ',JSON.stringify(await members))
})
的引用,并在方法中对void operatingCost(ref double afterFees)
{
afterFees = (donationBFees / 17);
}
执行操作(在这种情况下,将其分配给afterFees
),而不返回任何东西。但是,此行:
afterFees
表示您正在为该方法的结果分配donationBFees / 17
,该方法的返回类型为afterFeesBox.Text = operatingCost(ref afterFees);
,因此无效。
您也永远不会声明Text
,除非使用该方法(该方法无效)。我想您会收到一条错误消息:“名称...在当前上下文中不存在。”您需要在本地声明此变量(并将其重命名为不冲突):
void
那么您可以做些事情:
1)返回一个类型(您当前正在使用afterFees
,但是,如注释中所建议,可能要使用double partAfterFees = 0;
operatingCost(ref partAfterFees);
)。然后,您可以根据需要删除double
。然后,您可以执行以下操作:
decimal
但这似乎很奇怪,所以我可能会做(考虑到你所说的话):
ref
请注意,有一些“更好”的解决方案,涉及重构和检查有效输入等。但是,我认为这可以回答您的问题。
答案 2 :(得分:0)
我将方法从onClick中移出了,我更改了用于计算捐赠百分比(用户输入)的计算。我还格式化了输出,使其在小数点后仅显示两个位置,并显示一个美元符号。我仍然需要创建错误处理程序来验证用户输入,但这不应该成为问题。我对传球裁判有疑问,但我能更好地理解它的工作原理。谢谢大家的帮助!
private decimal donationBFees = 0;
void deductOperatingCost(ref decimal afterFeesParam)
{
afterFeesParam = afterFeesParam - (afterFeesParam / 100 * 17);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
String donationBeforeFees;
Decimal aFees;
String totalDonationRaised;
donationBeforeFees = donationBox.Text;
donationBFees = System.Convert.ToDecimal(donationBeforeFees);
decimal afterFees = donationBFees;
deductOperatingCost(ref afterFees);
afterFeesBox.Text = afterFees.ToString("$###, ##0.00");
}