今天项目中要用到为某个bool值属性设置默认值为true的功能,在项目中我是这样写的
- /// <summary>
- /// 是否改变地图鼠标样式
- /// </summary>
- [DefaultValue(true)]
- public bool IsChangeCursor
- {
- get
- {
- string debug = string.Format("{0}", ViewState["IsChangeCursor"]);
- bool result = true;
- if (Boolean.TryParse(debug, out result))
- {
- return result;
- }
- return result;
- }
- set
- {
- ViewState["IsChangeCursor"] = value;
- }
- }
结果取出来的属性总是false???
通过Reflctor查了下Boolean.TryParse方法发现在一开始为result初始化为false了:
- public static bool TryParse(string value, out bool result)
- {
- result = false;
- if (value != null)
- {
- if ("True".Equals(value, StringComparison.OrdinalIgnoreCase))
- {
- result = true;
- return true;
- }
- if ("False".Equals(value, StringComparison.OrdinalIgnoreCase))
- {
- result = false;
- return true;
- }
- if (m_trimmableChars == null)
- {
- char[] destinationArray = new char[string.WhitespaceChars.Length + 1];
- Array.Copy(string.WhitespaceChars, destinationArray, string.WhitespaceChars.Length);
- destinationArray[destinationArray.Length - 1] = '/0';
- m_trimmableChars = destinationArray;
- }
- value = value.Trim(m_trimmableChars);
- if ("True".Equals(value, StringComparison.OrdinalIgnoreCase))
- {
- result = true;
- return true;
- }
- if ("False".Equals(value, StringComparison.OrdinalIgnoreCase))
- {
- result = false;
- return true;
- }
- }
- return false;
- }
所以在未给IsChangeCursor设置为true时取到的值总为false
将
- /// <summary>
- /// 是否改变地图鼠标样式
- /// </summary>
- [DefaultValue(true)]
- public bool IsChangeCursor
- {
- get
- {
- string debug = string.Format("{0}", ViewState["IsChangeCursor"]);
- bool result = true;
- if (Boolean.TryParse(debug, out result))
- {
- return result;
- }
- return true;//改为默认返回true
- }
- set
- {
- ViewState["IsChangeCursor"] = value;
- }
- }
探讨了在ASP.NET中如何正确使用ViewState保存布尔值,并确保其默认值为true的方法。文章通过具体示例展示了当ViewState为空时如何避免取值为false的问题。

被折叠的 条评论
为什么被折叠?



