我使用此属性来帮助用户通过指定不应该出现的内容来筛选结果。它们可以用INCLUDE_INTERPRET_SEPARATORS
中的所有字符来分隔它们的术语。字符串在启动和关闭时保存到一个XML文件中。
但是,列表最终总是只有一个索引。有一段时间,我想知道是否必须通过XML反序列化加载值,但断点确认应用程序在启动时使用setter。
更新后,我已经确认拆分将在不同的环境中工作。我仍然不知道为什么这个代码最初不起作用。
下面的CCD_ 2和CCD_。
private readonly char[] INCLUDE_INTERPRET_SEPARATORS = {';', '|', '+'};
private const string INCLUDE_SEPARATOR = ";";
private List<string> _Exclude = new List<string>();
[DataMember()]
public string Exclude
{
get
{
return String.Join(INCLUDE_SEPARATOR, _Exclude);
}
set
{
string input = Utils.RemoveDiacritics(value);
_Exclude = new List<string>(input.Split(INCLUDE_INTERPRET_SEPARATORS, StringSplitOptions.RemoveEmptyEntries));
onPropertyChanged("Exclude");
}
}
示例
在我的XML文件中,我有
<Episode>9</Episode>
<Exclude>WEB-DL;1080i;MPEG</Exclude>
<FilterEpisode>true</FilterEpisode>
断点显示Exclude
设置为
Index Value Type
[0] "WEB-DL;1080i;MPEG" String
我是不是遗漏了一些明显的东西?
更新
我在dotnetfiddle上做了一个测试,发现代码在一个简化的环境中工作,没有DataContractSerializer。
同样,当我添加一个额外的属性时,它也会起作用:
private readonly char[] INCLUDE_INTERPRET_SEPARATORS = {';', '|', '+'};
private const string INCLUDE_SEPARATOR = ";";
[IgnoreDataMember()]
public List<string> ExcludeList
{
get
{
return new List<string>(Exclude.Split(INCLUDE_INTERPRET_SEPARATORS, StringSplitOptions.RemoveEmptyEntries));
}
}
private string _Exclude = "";
[DataMember()]
public string Exclude
{
get
{
return _Exclude;
}
set
{
_Exclude = Utils.RemoveDiacritics(value);
foreach (string x in ExcludeList)
{
System.Diagnostics.Debug.WriteLine(x);
}
onPropertyChanged("Exclude");
}
}
更新2
我发现了问题所在。当从XML反序列化加载类对象时,INCLUDE_INTERPRET_SEPARATORS
为空。绳子不会裂开。通过使这些字段成为静态字段,它们在启动时仍将被初始化。
是的,您缺少了一些东西。设置断点时,请检查_Exclude的值,而不是Exclude。