13

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

と:

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

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

何をすべきか?

編集:

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

/ M

4

8 に答える 8

27

まず、文字列をintに解析し、結果を文字列に貼り付けようとしているのはなぜですか?

メソッドシグネチャは

bool int.TryParse(string, out int)

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

int? TryParse2(string s) {
    int i;
    if (!int.TryParse(s, out i)) {
        return null;
    } else {
        return i;
    }
}
于 2009-11-13T14:19:25.510 に答える
14

これが適切な使用法ですInt32.TryParse

int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
    value = dummy;
}
else {
    value = null;
}
return value;
于 2009-11-13T14:17:34.070 に答える
10

これはどう?

public int? ParseToNull(string categoryId)
{
    int id;
    return int.TryParse(categoryId, out id) ? (int?)id : null;
}
于 2009-11-13T14:20:38.083 に答える
2

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

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

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

于 2015-06-11T18:22:47.540 に答える
0

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

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

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

try
{
res = Int32.Parse(strVAR)
}
catch(exception ex) 
{
 return null;
}
于 2009-11-13T14:16:16.437 に答える
0

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

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

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

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

int.TryParse(strCategoryID, out categoryID);
于 2009-11-13T14:16:58.480 に答える
0

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;
    }
}
于 2009-11-13T14:17:30.653 に答える
0

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

public int? Parse(string categoryID) 
{
  int value;
  if (int.TryParse(categoryID, out value))
  {
    return value;
  }
  else
  {
    return null;
  }
}
于 2009-11-13T14:19:18.773 に答える