- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
private int? ID {
set {
if (ViewState["ID"] != null)
ViewState["ID"] = value;
else
ViewState.Add("ID", value);
}
get {
if (ViewState["ID"] != null)
return Convert.ToInt32(ViewState["ID"]);
else
return null;
}
}
Back 25.06.2010 05:57 # +1
private int? ID {
set {
ViewState["ID"] = value;
}
get {
return (int?)ViewState["ID"];
}
}
Ivanoff80 29.06.2010 10:54 # 0
private int? ID
{
set
{
if (ViewState.ContainsKey("ID"))
ViewState["ID"] = value;
else
ViewState.Add("ID", value);
}
get
{
return ViewState.ContainsKey("ID")? (int?)ViewState["ID"] : null;
}
}
А иначе при первой же записи/чтении вылетит эксепшн.
Back 29.06.2010 12:29 # 0
если ViewState["ID"] == null, то он кастится к (int?), который тоже может быть null
Ivanoff80 29.06.2010 13:08 # 0
Ivanoff80 29.06.2010 13:16 # 0
Back 29.06.2010 13:28 # 0
ViewState["id"] = 1;
var t = ViewState["id"];
ViewState["id"] = 2;
t = ViewState["id"];
вот небольшой пример. никаких эксепшенов и вообще все ожидаемо и логично.
Back 29.06.2010 13:30 # 0
public string NavigateUrl
{
get
{
string text = (string) ViewState["NavigateUrl"];
if (text != null)
return text;
else
return string.Empty;
}
set
{
ViewState["NavigateUrl"] = value;
}
}
http://msdn.microsoft.com/en-us/library/ms972976.aspx
как видим, геттер проверяет на null и возвращает пустую строку, если вдруг, а вот сеттер просто устанавливает значение
Ivanoff80 29.06.2010 13:40 # 0
Back 29.06.2010 14:00 # 0
долгое время тоже писал не очень оптимально, теперь сокращаю код и убираю лишние проверки