C# 在C中读取整数的替代方法#

C# 在C中读取整数的替代方法#,c#,input,type-conversion,inputstream,beginread,C#,Input,Type Conversion,Inputstream,Beginread,我知道通过使用Convert.To方法读取输入,但是除了此之外还有其他读取方法吗 int k = Convert.ToInt16(Console.ReadLine()); 从控制台应用程序读取输入的最简单方法是console.ReadLine。有可能的替代方案,但它们更为复杂,只适用于特殊情况:请参阅或 但是,重要的是转换为整数,不应使用Convert.ToInt32或Int32.Parse进行转换,而应使用 使用Int32.TryParse的原因在于,您可以检查是否可以转换为整数。相反,其

我知道通过使用
Convert.To
方法读取输入,但是除了此之外还有其他读取方法吗

int k = Convert.ToInt16(Console.ReadLine()); 

从控制台应用程序读取输入的最简单方法是
console.ReadLine
。有可能的替代方案,但它们更为复杂,只适用于特殊情况:请参阅或

但是,重要的是转换为整数,不应使用
Convert.ToInt32
Int32.Parse
进行转换,而应使用


使用
Int32.TryParse
的原因在于,您可以检查是否可以转换为整数。相反,其他方法会引发一个异常,您应该处理使代码流复杂化的异常。

您可以使用
int.TryParse

参见示例

var item = Console.ReadLine();
int input;
if (int.TryParse(item, out input))
{
    // here you got item as int in input variable.
    // do your stuff.
    Console.WriteLine("OK");
}
else
    Console.WriteLine("Entered value is invalid");

Console.ReadKey();

以下是您可以遵循的最佳选择:

int k;
if (int.TryParse(Console.ReadLine(), out k))
   {
      //Do your stuff here
   }
else 
   {
      Console.WriteLine("Invalid input");
   }

您可以为Console创建自己的实现,并在任何地方使用它:

public static class MyConsole
{
    public static int ReadInt()
    {
        int k = 0;
        string val = Console.ReadLine();
        if (Int32.TryParse(val, out k))
            Console.WriteLine("You have typed a valid integer: " + k);
        else
            Console.WriteLine("This: " + val + " is not a valid integer");
        return k;
    }

    public static double ReadDouble()
    {
        double k = 0;
        string val = Console.ReadLine();
        if (Double.TryParse(val, out k))
            Console.WriteLine("You have typed a valid double: " + k);
        else
            Console.WriteLine("This: " + val + " is not a valid double");
        return k;
    }
    public static bool ReadBool()
    {
        bool k = false;
        string val = Console.ReadLine();
        if (Boolean.TryParse(val, out k))
            Console.WriteLine("You have typed a valid bool: " + k);
        else
            Console.WriteLine("This: " + val + " is not a valid bool");
        return k;
    }
}

class Program
{
    static void Main(string[] args)
    {
        int s = MyConsole.ReadInt();
    }

}

有3种类型的整数:

1.):16位数字(-32768到32767)。在c语言中,可以将短整数变量声明为
short
Int16

2.):32位数字(-2147483648至2147483647)。用关键字
int
Int32
声明一个整数

3.):64位数字(-9223372036854775808至9223372036854775807)。使用
long
Int64
声明一个长整数

不同之处在于可以使用的数字范围。
您可以通过使用
convert.To
Parse
TryParse
来转换它们。这不是您想要的吗?实际上,您应该使用
convert.ToInt32
。还有
int.Parse
。是的,但我想知道还有其他方法吗?。如果你写的数字大于2^16(更精确的是2^16-1),前者将在
Convert.ToInt32
正常工作时产生错误。这不是一个重复的问题吗?我确信至少有20个类似的。这像是用户定义的函数吗?这些只是用户定义的函数)您有编译时间错误,因为
k
变量未初始化。另外,
Console.WriteLine(“这个:“+k+”不是一个有效的整数”)不显示用户的输入。当然,您是正确的。我没有直截了当地思考,我可以说我把Console.WriteLine和k值放在后面只是为了显示错误
public static class MyConsole
{
    public static int ReadInt()
    {
        int k = 0;
        string val = Console.ReadLine();
        if (Int32.TryParse(val, out k))
            Console.WriteLine("You have typed a valid integer: " + k);
        else
            Console.WriteLine("This: " + val + " is not a valid integer");
        return k;
    }

    public static double ReadDouble()
    {
        double k = 0;
        string val = Console.ReadLine();
        if (Double.TryParse(val, out k))
            Console.WriteLine("You have typed a valid double: " + k);
        else
            Console.WriteLine("This: " + val + " is not a valid double");
        return k;
    }
    public static bool ReadBool()
    {
        bool k = false;
        string val = Console.ReadLine();
        if (Boolean.TryParse(val, out k))
            Console.WriteLine("You have typed a valid bool: " + k);
        else
            Console.WriteLine("This: " + val + " is not a valid bool");
        return k;
    }
}

class Program
{
    static void Main(string[] args)
    {
        int s = MyConsole.ReadInt();
    }

}