<String> 当我用字符数组拆分字符串时,获取只有一个长度的列表



我使用此属性来帮助用户通过指定不应该出现的内容来筛选结果。它们可以用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。

相关内容

  • 没有找到相关文章

最新更新