【问题标题】:parameters passing by ref in C#在 C# 中通过 ref 传递的参数
【发布时间】:2020-06-08 09:38:24
【问题描述】:

我是编程新手,现在我正在做一些练习,但是我无法完成一项任务(或者我不明白),我被困在数字(3)上,你能帮忙吗我 ? 这是练习和我的代码:

(1)应该有单独的转换方法

(2)应该有一个单独的方法叫做 ConvertSecondsToHoursMinutesSeconds

(3)应该有一个值传递的int参数和三个int参数 通过 ref

(4)应正确将秒转换为小时、分钟和秒

  public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        conversion();
    }
    private void ConvertSecondsToHoursMinutesSecondsMethod(long totalSeconds) 
    {
        long hours, mins, secs, v;

        hours = totalSeconds / 3600;
        v = totalSeconds % 3600;
        mins = v / 60;
        secs = v % 60;
    }
    private void conversion(ref long hours, ref long secs, ref long mins)

    {
        long seconds = Convert.ToInt64(userInputLabel.Text);
        ConvertSecondsToHoursMinutesSecondsMethod(seconds);

        outputLabel.Content = $"{hours} {mins} {secs}";


    }
}

【问题讨论】:

  • 我也觉得缺少一些东西,比如问题演示或上下文解释。这是作业的全部内容吗?
  • 对,这就是作业的全部内容
  • 由于 youtube.com/watch?v=-5wpm-gesOY 和 infiniteundo.com/post/25326999628/… 我认为在这里鼓励最佳实践并使用 DateTime 库和/或其他平台类进行时间处理是一个好主意,并且不是人工翻译。

标签: c# methods ref


【解决方案1】:

您需要将收到的 ref 参数传递给您调用的其他方法,以便它们接收正确的值。一旦方法返回,局部变量通常不存在。

private void ConvertSecondsToHoursMinutesSecondsMethod(long totalSeconds, ref long secs, ref long mins) 
{
    hours = totalSeconds / 3600;
    long v = totalSeconds % 3600;
    mins = v / 60;
    secs = v % 60;
}

private void conversion()
{
    long hours, secs, mins;
    long seconds = Convert.ToInt64(userInputLabel.Text);
    ConvertSecondsToHoursMinutesSecondsMethod(seconds, ref hours, ref secs, ref mins);

    outputLabel.Content = $"{hours} {mins} {secs}";
}

【讨论】:

  • 非常感谢!我现在可以看到
【解决方案2】:

试试这个

还可以查看https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref 以了解正确使用 ref 的方法

public MainWindow()
{
    InitializeComponent();

}

private void Button_Click(object sender, RoutedEventArgs e)
{
    Conversion();
}
private void ConvertSecondsToHoursMinutesSecondsMethod(int totalSeconds, ref long hours, ref long secs, ref long min)
{
    long v;
    hours = totalSeconds / 3600;
    v = totalSeconds % 3600;
    min = v / 60;
    secs = v % 60;
}
private void Conversion()
{
    long hours = 0;
    long secs = 0;
    long mins = 0;
    int seconds = Convert.ToInt32(userInputLabel.Text);

    ConvertSecondsToHoursMinutesSecondsMethod(seconds, ref hours, ref mins, ref secs);

    outputLabel.Content = $"{hours} {mins} {secs}";
}

【讨论】:

  • 您将totalSeconds/seconds 从long/Int64 更改为int/Int32 的原因是什么?
  • 根据 OP 的问题。 (3) 应该有一个值传递的int参数
  • 嗯,它也写着and three *int* parameters passed by ref,但你一直在那里
猜你喜欢
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多