簡體   English   中英

確定參數是否為數字

[英]Determine if argument is numeric

在我的應用程序中,我有一個采用三個數字作為參數的方法。 但是,該方法只能將數字值用作參數,因此,我需要檢查參數是否為數字。 我怎樣才能以一種輕松且最好是優雅的方式做到這一點? 謝謝提前

  public Triangle(double a, double b, double c) {
      if ((a != ?) || (b != ?) || (c != ?)){
            throw new ArgumentException("Not a number")
      }   
    sides = new double[] { a, b, c };
  } 

C#是強類型的。 因此,如果您指定參數為數字,則將無法使用非數字參數來調用方法。

在當前代碼示例中,根據定義,這些值是“數字”,它們被鍵入為double 看一看Double的邊緣情況下Double的公共常量,即NaNPositiveInfinityNegativeInfinity

如果要基於用戶輸入測試值是否實際上是非數字,則應將參數鍵入為string並且可以使用Double.TryParse (返回bool )或Double.Parse (引發異常)來測試它們是否為數字。

使用您的原型:

public Triangle(double a, double b, double c)

如果您嘗試將除double以外的任何內容傳遞給該方法,則編譯器應引發錯誤。 但是,如果您從鍵盤以字符串形式讀取輸入,並且需要檢查這些字符串是否為雙精度,則可以使用

double.TryParse(string, num);

由於C#是強類型的,因此double始終是數字值。 您無需檢查它是否真的是數字,因為相反的情況永遠不會發生。

如果您有三個objects作為參數,則可以嘗試將其強制轉換或檢查其類型。

使用IsNaN() (不是數字)。

if (double.IsNaN(a) || double.IsNaN(b) || double.IsNaN(c))
    throw new ArgumentException(...)

如果您有必須轉換為雙精度的字符串,那么在進行測試和轉換時也可能會產生重載:

public Triangle(double a, double b, double c) {  
    sides = new double[] { a, b, c };
}  

public Triangle(string a, string b, string c) {
    double aa, bb, cc;
    if (double.TryParse(a, out aa) && double.TryParse(b, out bb) && double.TryParse(c, out cc)) {  
        sides = new double[] { aa, bb, cc };
    } else {
        throw new ArgumentException("Not a number");
    }
}  

但是,編譯器將永遠不允許您將字符串分配給double變量或方法參數。

嘗試使用AJAX-過濾的文本框擴展程序,並將其配置為僅接受數字,這樣就可以解決您的問題而無需任何編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM