可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
is there some way of return null if it can't parse a string to int?
with:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
getting "cannot convert from 'out string' to 'out int'
what to do?
EDIT:
No longer relevant because of asp.net constraints is the way to solve problem
/M
回答1:
First of all, why are you trying to parse a string to an int and stick the result back into a string?
The method signature is
bool int.TryParse(string, out int)
so you have to give a variable of type int
as second argument. This also means that you won't get null
if parsing fails, instead the method will simply return false
. But you can easily piece that together:
int? TryParse2(string s) {
int i;
if (!int.TryParse(s, out i)) {
return null;
} else {
return i;
}
}
回答2:
Here's a proper use of Int32.TryParse
:
int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
value = dummy;
}
else {
value = null;
}
return value;
回答3:
How about this?
public int? ParseToNull(string categoryId)
{
int id;
return int.TryParse(categoryId, out id) ? (int?)id : null;
}
回答4:
Simplest and one-liner...
int N = int.TryParse(somestring, out N) ? N : 0;
It works 'cause it's evaluated left to right. Null not so easy.
回答5:
TryParse
will return false if the string can't be parsed. You can use this fact to return either the parsed value, or null. Anyway I guess that you are intending to return int?
from your method, then it would be something like this:
public int? ParseInt(string categoryID)
{
int theIntValue;
bool parseOk = int.TryParse(categoryID, out theIntValue);
if(parseOk) {
return theIntValue;
} else {
return null;
}
}
回答6:
Do you want to do something like this?
public int? Parse(string categoryID)
{
int value;
if (int.TryParse(categoryID, out value))
{
return value;
}
else
{
return null;
}
}
回答7:
Int is a value type which means there is no such thing as a null int. So no, TryParse will never alter the out parameter so that it is null.
But the problem you're having is you're passing a string to the out parameter of TryParse when its expecting an integer.
You need something like this...
Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";
int.TryParse(strCategoryID, out categoryID);
回答8:
** this answer was down-voted a lot **
Although it is a possible solution - it is a bad one performance wise, and probably not a good programming choice.
I will not delete it, as I guess many programmers might not be aware of this, so here is an example how not to do things:
use try and catch
try
{
res = Int32.Parse(strVAR)
}
catch(exception ex)
{
return null;
}