参数2可能无法与'out'关键字一起传递

时间:2018-06-21 13:12:13

标签: c# arrays algorithm

我是编程新手,我试图使用一个for循环在四个数组中插入值。但是,我仅收到错误消息:(参数2可能无法与'out'关键字一起传递。我知道控制台readline周围存在问题,但我无能为力,可以解决这种情况。到目前为止,这是我的代码:

int size;
do
{
    Console.Clear();
    Console.Write("What is the size of the array: ");

} while (!int.TryParse(Console.ReadLine(), out size));

string[] name = new string [size];
double[] grade1 = new double [size];
double[] grade2 = new double[size];
double[] avarage = new double [size];

for (int i = 0; i < size; i++)
{
    do
    {
        Console.Write($"Insert the name of student number: {i + 1}: ");
    } while (!Convert.ToString(Console.ReadLine(), out name[i]));

    do
    {
        Console.Write($"Insert {i + 1}º grade: ");
    } while (!Convert.ToDouble(Console.ReadLine(), out grade1[i]));
}

1 个答案:

答案 0 :(得分:1)

虽然int.TryParse返回bool,而Convert.ToStringConvert.ToDouble却没有,并且与其他语言不同,C#不允许您将其他类型视为{{1} }简化为bool比较。因此,当null不是!value时,通常不能使用value

请注意,在第二次转换的情况下,您是将字符串(控制台输入)转换为字符串,因此 不是必需的-只需获取字符串并检查{{3} }(尽管您需要多行)。因此

bool

对于第三次转换,您可以改用IsNullOrWhitespace

do
{
    Console.Write($"Insert the name of student number: {i + 1}: ");
    name[i] = Console.ReadLine();
} while (string.IsNullOrWhitespace(name[i]));

值得注意的是,.NET中的大多数数字类型都支持} while(!double.TryParse(Console.ReadLine(), out grade1[i])); 方法,将字符串转换为仅使代码看起来相同的字符串是YAGNI原理的一个很好的例子。