【问题标题】:What is the correct way to take input in c#, Convert vs Parse什么是在 c# 中接受输入的正确方法,Convert vs Parse
【发布时间】:2019-08-31 17:01:36
【问题描述】:

我在 c# 中看到了其他一些从用户那里获取输入的方法,这真的很令人困惑。 我可以同时使用这两种方式来获取输入还是只用于浮动

有更多的方法来获取输入吗?

float myAge;

myAge = Convert.Toint64(Console.ReadLine());

float myAge;

float myAge = float.Parse(Console.ReadLine());

【问题讨论】:

  • 更好的是:float.TryParse。永远不要假设用户的输入格式正确

标签: c# variables


【解决方案1】:

我会推荐TryParse,以避免在用户未提供有效浮点数的情况下出现异常。

float myAge;
float.TryParse(Console.ReadLine(), out myAge);

或在 1 行中 float.TryParse(Console.ReadLine(), out float myAge);

TryParse 将返回一个布尔值,您可以使用它来检查该值是否为有效浮点数。

if(float.TryParse(Console.ReadLine(), out myAge)){
   //do stuff
}else{
    Console.WriteLine("You did not give a float");
}

double, int 也有这些方法。它不仅适用于floats

【讨论】:

    【解决方案2】:
    myAge = Convert.Toint64(Console.ReadLine())
    

    当您输入分数作为输入时,上述将引发异常。 Convert 将尝试转换为 64 位整数,然后分配给您的变量 myAge,它是一个浮点数。如果是分数转换会失败并抛出异常。

    float myAge = float.Parse(Console.ReadLine());
    

    上面,使用 float.Parse 将保留带有分数的浮点数。但是,如果它不是数字,则会抛出异常。

    最好的选择是使用 TryPrase 并确认输入是否正确:

    float myAge;
    while(!float.TryParse(Console.ReadLine(), out myAge))
    {
       Console.WriteLine("Invalid entry, enter a number.");
    }
    

    【讨论】:

      【解决方案3】:

      您还没有说明所需的数据类型是:floatInt64 (long) 还是其他?看到myAge 在两个sn-ps 中都是float,这表明您希望用户能够输入float,因此您应该使用返回float 的方法。

      您当然可以读取long 并将其存储在float 中,但我认为没有任何理由这样做。如果您不让用户实际输入小数部分,为什么要让您的变量存储小数部分?如果您阅读long,请将其存储在long 中。如果您存储float,请调用读取float 的方法。

      请注意,您是在比较 Convert.ToInt64()float.Parse(),而您似乎应该比较...

      • Convert.ToInt64()Convert.ToSingle()floatalias 对应于 Single),并且...
      • float.Parse()long.Parse()

      正如其他人所提到的,还有TryParse() 版本的Parse() 方法。

      这一切都归结为个人喜好。对我来说,解析是正在执行的具体操作,所以我会选择Parse()(或TryParse())方法。有些人可能更喜欢更通用的Convert.ToXXX() 方法,因为它们有更多数据类型的重载,而不仅仅是string。最后,Convert.ToInt64() is internally calling Int64.Parse(),反正...

      public static long ToInt64(string value) {
          if (value == null)
              return 0;
          return Int64.Parse(value, CultureInfo.CurrentCulture);
      }
      

      ...并且是documented as such...

      使用ToInt64(String) 方法相当于将value 传递给Int64.Parse(String) 方法。

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 2013-05-12
          • 1970-01-01
          • 2019-02-22
          • 1970-01-01
          • 1970-01-01
          • 2019-05-07
          • 2011-01-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多