文字列をintに解析できない場合にnullを返す方法はありますか?
と:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
「outstring」から「outint」に変換できません
何をすべきか?
編集:
Asp.netの制約が問題を解決する方法であるため、関連性がなくなりました
/ M
まず、文字列を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;
}
}
Int32.TryParse
の適切な使用法は次のとおりです。
int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
value = dummy;
}
else {
value = null;
}
return value;
これはどう?
public int? ParseToNull(string categoryId)
{
int id;
return int.TryParse(categoryId, out id) ? (int?)id : null;
}
最もシンプルでワンライナー...
int N = int.TryParse(somestring, out N) ? N : 0;
左から右に評価されるため、機能します。ヌルはそれほど簡単ではありません。
**この回答は多くの反対票を投じました**これは可能な解決策ですが、パフォーマンスの面では悪いものであり、おそらくプログラミングの選択としては適切ではありません。
多くのプログラマーがこれに気付いていないかもしれないので、私はそれを削除しません、それでここに物事をしない方法の例があります:
試してキャッチを使用する
try
{
res = Int32.Parse(strVAR)
}
catch(exception ex)
{
return null;
}
Intは値型であり、nullintなどは存在しないことを意味します。したがって、TryParseがoutパラメータを変更してnullになることはありません。
しかし、あなたが抱えている問題は、整数を期待しているときに、TryParseのoutパラメーターに文字列を渡していることです。
あなたはこのようなものが必要です...
Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";
int.TryParse(strCategoryID, out categoryID);
文字列を解析できない場合、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;
}
}
このようなことをしたいですか?
public int? Parse(string categoryID)
{
int value;
if (int.TryParse(categoryID, out value))
{
return value;
}
else
{
return null;
}
}