我使用此属性来帮助用户过滤结果,方法是指定不应出现的内容。他们可以将自己的条款与INCLUDE_INTERPRET_SEPARATORS
中的所有字符分开。 String在启动并关闭时保存为XML文件。
但是,List总是只有1个索引。我想知道它是否与通过XML反序列化加载值有关,但断点确认应用程序在启动时使用setter。
更新后,我确认分割将在不同的环境中运行。我仍然不知道为什么这段代码最初没有用。
下面的 _Exclude
和Exclude
是有目的的不同类型。
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
我是否遗漏了一些明显的事情?
更新
我做了一个test on 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
为空。字符串不会被拆分。通过将这些字段设置为静态,它们仍将在启动时初始化。
答案 0 :(得分:1)
是的,你错过了一些东西。设置断点时,请检查_Exclude的值,而不是Exclude。