gpt4 book ai didi

c# - SettingsPropertyValue.SerializedValue 为 null,除非我通过 locals 查看变量

转载 作者:行者123 更新时间:2023-11-30 17:15:13 25 4
gpt4 key购买 nike

我将 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,你会导致 _ChangedSinceLastSerializedtrue,这会导致对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com