- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 C# 程序中使用的一些常用设置存储在 ApplicationSettings
中。大多数设置都是字符串,但其中之一是 StringCollection
。
在循环遍历 Properties.Settings.Default
中的默认设置并将它们添加到字典(准备作为参数发送)的某些代码中出现空异常,如下所示。
// Generate parameters
Dictionary<string, string> signalparams = new Dictionary<string, string>();
// Add parameters
foreach (SettingsProperty property in Properties.Settings.Default.Properties)
{
SettingsPropertyValue value = new SettingsPropertyValue(property);
if (value.Property.SerializeAs == SettingsSerializeAs.Xml)
{
// Here's where the error occurs
signalparams.Add(value.Name, value.SerializedValue.ToString());
}
else if (value.Property.SerializeAs == SettingsSerializeAs.String)
{
signalparams.Add(value.Name, value.PropertyValue.ToString());
}
}
字符串设置添加得很好,但是当它到达 StringCollection
时,它(正确地)评估该属性具有 SerializeAs == SettingsSerializeAs.Xml
。但是,SerializedValue
为空,因此 ToString()
会抛出异常。
奇怪的是,当运行调试器时,SerializedValue
为 null until 我尝试在本地窗口中查看 value
变量的属性.那时,SerializedValue
包含 StringCollection
的正确 XML 序列化格式,程序继续正常运行。
为什么会这样?
最佳答案
这个问题可能源于 SerializedValue
是一个实现类似这样的属性:
public object SerializedValue
{
get
{
if (this._ChangedSinceLastSerialized)
return CalculateSerializedData();
else
return _cachedData;
}
}
在我看来,在你的情况下发生的事情是,当你第一次访问 SettingPropertyValue 时,你会得到 _cachedData,然后,通过调试器查看 value
,你会导致 _ChangedSinceLastSerialized
为 true
,这会导致对 SerializedValue
属性的下一次调用返回实际的序列化值。
下一个问题是找出为什么 _ChangedSinceLastSerialized
在您的案例中设置为 false
。当用户要么访问设置(在大多数对象类型的情况下),因此例如仅像这样访问您的设置:MyAppSettings.Default.MySettingObject 会将 _ChangedSinceLastSerialized
更改为 true
。
如果您有类似这样的代码,可能会发生什么情况:
object storingObject = MyAppSettings.Default.MySettingObject;
// Now I will use storingObject to access the setting.
一旦你做了类似的事情并继续使用 storingObject
而不是直接访问 MyAppSettings
你可以创建一个对象在 _ChangedSinceLastSerialized
保持 false
。
希望对您有所帮助。
关于c# - SettingsPropertyValue.SerializedValue 为 null,除非我通过 locals 查看变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156467/
我将 C# 程序中使用的一些常用设置存储在 ApplicationSettings 中。大多数设置都是字符串,但其中之一是 StringCollection。 在循环遍历 Properties.Set
我是一名优秀的程序员,十分优秀!