c# - 使用引用参数

标签 c#

我正在通过书本自学 C#,希望能得到一些帮助。我想创建一个简单的控制台程序,以允许用户输入要加倍的数字。它说 Main 方法中的变量 result 未分配,但是,我做错了什么?

using System;
class Program
{

    private static void Double(ref int num, ref int result)
    {
        result = num * 2;

    }

    private static int readNumber(string question)
    {
        Console.Write(question);
        string ans = Console.ReadLine();
        int number = int.Parse(ans);
        return number;
    }

    public static void Main()
    {
        int num, result;
        num = readNumber("Enter an integer to be doubled: ");
        Double(ref num, ref result);
        Console.WriteLine("The double of {0} is {1}", num, result);
        Console.WriteLine("Press enter to exit...");
        Console.ReadLine();
    }
}

最佳答案

编译器对你大喊大叫,因为它想强制你在将变量传递给方法调用之前对其进行初始化。

含义:

int num, result;

应该是:

int num = 0;
int result = 0;

可能有更好的方法来做你想做的事情,根本不需要任何 ref 参数,只需使用方法的返回值:

private static int Double(int num)
{
    return num * 2;
}

然后像这样消费它:

public static void Main()
{
    int num = readNumber("Enter an integer to be doubled: ");
    int result = Double(num);
    Console.WriteLine("The double of {0} is {1}", num, result);
    Console.WriteLine("Press enter to exit...");
    Console.ReadLine();
}

这甚至可以 (IMO) 增强代码的可读性并更好地传达您的意图。

关于c# - 使用引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174449/

相关文章:

c# - Log4net 不记录异常

c# - 是否可以从内部用常量代码包装一个方法?

c# - 流畅的 nHibernate 多对多映射

c# - 如何为通用列表 orderby 函数创建委托(delegate)?

c# - 将具有多个元素的 XML 反序列化为单个 C# 对象

c# - 如何解析 yaml 字符串

C# 随机算法直到满足条件

c# - 如何在 Visual C# 2010 Express 中切换调试和发布?

c# - 在 silverlight xaml c# 中只有两个圆角的图像

c# - 什么是 UMThunkStubAMD64?为什么它看起来是一个瓶颈?