передача параметров по ссылке в C# - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок в программировании и сейчас я делаю некоторые упражнения, однако я не смог выполнить одно задание (или я не понял), я застрял на цифре (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}";


    }
}

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Попробуйте это

Также взгляните на 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}";
}
0 голосов
/ 24 февраля 2020

Вам нужно передать полученные параметры ссылки другому методу, который вы вызываете, чтобы они получили правильные значения. Локальные переменные обычно не существуют, когда метод возвращает.

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}";
}
...