есть ли лучший способ, чем try/catch для разбора чисел и datetimes без сбоев страницы?
если они не являются допустимыми числами /datetimes, они должны быть пустыми.
вот что я получил до сих пор:
long id = null;
try{
id = Int64.Parse(Request.QueryString["id"]);
}catch(Exception e){}
DateTime time = null;
try{
time = DateTime.Parse(Request.QueryString["time"]);
}catch(Exception e){}
код >
int tempInt = 0;
if(int.TryParse(Request["Id"], out tempInt))
//it good!!
Аналогично, для даты "DateTime.TryParse"
изменить
Чтобы полностью имитировать ваш код, вы должны иметь следующее:
long? id = null; DateTime? time = null;
long tempLong; DateTime tempDate;
if(long.TryParse(Request["id"], out tempLong))
id = tempLong;
if(DateTime.TryParse(Request["time"], out tempDate))
time = tempDate;
Используйте TryParse вместо Parse.
TryParse не бросает и хорошо подходит для ситуаций, подобных этому, когда вход не обязательно доверен, и вы не хотите, чтобы возникло исключение.
Вы заметили TryParse?
long id = -1;
if(Int64.TryParse(Request.QueryString["id"] ?? "", out id))
// is valid...
Так я обычно делаю в своих проектах:
public long? ClientId
{
get
{
long? result = null;
if (Request.QueryString[QueryStringConstants.ClientId] != null)
result = Convert.ToInt64(Request.QueryString[QueryStringConstants.ClientId]);
return result;
}
}
public DateTime? ItemPurchasedDate
{
get
{
DateTime? result = null;
if (Request.QueryString[QueryStringConstants.ItemPurchasedDate] != null)
result = Convert.ToDateTime(Request.QueryString[QueryStringConstants.ItemPurchasedDate]);
return result;
}
}
И я определил свой статический класс QueryStringConstants, как этот
public static class QueryStringConstants
{
public static string ClientId = "clientId";
public static string ItemPurchasedDate = "itemPurchasedDate";
}