web-dev-qa-db-ja.com

int.TryParse =数値でない場合はnull?

文字列をintに解析できない場合にnullを返す方法はありますか?

と:

public .... , string? categoryID) 
{
int.TryParse(categoryID, out categoryID);

「outstring」から「outint」に変換できません

何をすべきか?

編集:

Asp.netの制約が問題を解決する方法であるため、関連性がなくなりました

/ M

13
Lasse Edsvik

まず、文字列をintに解析して、結果を文字列に戻そうとしているのはなぜですか?

メソッドシグネチャは

bool int.TryParse(string, out int)

したがって、2番目の引数としてint型の変数を指定する必要があります。これは、解析が失敗した場合にnullを取得せず、代わりにメソッドが単にfalseを返すことも意味します。しかし、それを簡単に組み合わせることができます。

int? TryParse2(string s) {
    int i;
    if (!int.TryParse(s, out i)) {
        return null;
    } else {
        return i;
    }
}
27
Joey

Int32.TryParse の適切な使用法は次のとおりです。

int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
    value = dummy;
}
else {
    value = null;
}
return value;
14
jason

これはどう?

public int? ParseToNull(string categoryId)
{
    int id;
    return int.TryParse(categoryId, out id) ? (int?)id : null;
}
10
DigitalNomad

最もシンプルでワンライナー...

int N = int.TryParse(somestring, out N) ? N : 0;

左から右に評価されるため、機能します。ヌルはそれほど簡単ではありません。

2
user5000501

**この回答は多くの反対票を投じました**これは可能な解決策ですが、パフォーマンスの面では悪いものであり、おそらくプログラミングの選択としては適切ではありません。

多くのプログラマーがこれに気付いていないかもしれないので、私はそれを削除しません、それでここに物事をしない方法の例があります:

試してキャッチを使用する

try
{
res = Int32.Parse(strVAR)
}
catch(exception ex) 
{
 return null;
}
0
Dani

Intは値型であり、nullintなどは存在しないことを意味します。したがって、TryParseがoutパラメータを変更してnullになることはありません。

しかし、あなたが抱えている問題は、整数を期待しているときに、TryParseのoutパラメーターに文字列を渡していることです。

あなたはこのようなものが必要です...

Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";

int.TryParse(strCategoryID, out categoryID);
0
Jason Punyon

文字列を解析できない場合、TryParseはfalseを返します。このファクトを使用して、解析された値またはnullを返すことができます。とにかく、メソッドからint?を返すつもりだと思いますが、次のようになります。

public int? ParseInt(string categoryID) 
{
    int theIntValue;
    bool parseOk = int.TryParse(categoryID, out theIntValue);
    if(parseOk) {
        return theIntValue;
    } else {
        return null;
    }
}
0
Konamiman

このようなことをしたいですか?

public int? Parse(string categoryID) 
{
  int value;
  if (int.TryParse(categoryID, out value))
  {
    return value;
  }
  else
  {
    return null;
  }
}
0