为什么在此String.Join中排除了分隔符? C#

时间:2017-01-10 12:38:01

标签: c# linq

我有一个ObservableCollection<T>我用于绑定,我想将其放入String.Join声明,但我不明白为什么它会给出我得到的结果以及如何解决它?

这是我用来获取结果的代码,

首先,我通过此LINQ查询获取所需的数据,

public static IEnumerable<string> GetNursingHomeNames(string home)
{
    return DataContext.NursingHomeNameServerTables.Where(p => p.Nursing_Home_Section == home)
                        .Select(p => p.Nursing_Home_Name).Distinct();
}

然后我将它放入ObservableCollection<T>(您可能想知道为什么我没有使用LINQ查询ObservableCollection<T>,但我有我的理由。)

public static void NursingHomeNamesCollection(ObservableCollection<string> nursingHomeNames, string nursingHomeSection)
{
    var homeNames = GetNursingHomeNames(nursingHomeSection);
    if (homeNames == null)
    {
        return;
    }
    foreach (var item in homeNames)
    {
        nursingHomeNames.Add(item);
    }
}

这是主窗口中的属性

 public ObservableCollection<string> NursingHomeNames { get; set; } =
                   new ObservableCollection<string>(); 

然后

我使用Join来获取我需要的特定目的的结果,

var result = String.Join(@",", NursingHomeNames.ToList());

这给出了以下结果,其中没有分隔符,只有空格

  

foo bar bat baz

但是,如果只是这样做,

ObservableCollection<string> observableCol = new ObservableCollection<string>() { "foo", "bar", "bat", "baz" };

var result = String.Join(@",", observableCol.ToList());

结果随着分隔符的出现而显示。

  

FOO,酒吧,蝙蝠,巴兹

为什么会这样做,是否有办法确保分隔符的正确放置?

我知道我必须遵守我的命名惯例。

编辑:在debuger中,这就是我所看到的,

将集合分配给名为data的变量并在Watch Window

中查看结果时
var data = NursingHomeNames.ToList();
  

计数= 4

     

[0]&#34; foo&#34;

     

[1]&#34; bar&#34;

     

[2]&#34; bat&#34;

     

[3]&#34; baz&#34;

但是,我不能使用任何其他不使用从数据库中提取数据的LINQ查询的代码来重现这一点。我尝试制作一个新列表并通过相同的代码传递该列表,但不会发生错误。我很抱歉,但我无法发布一个可以复制的例子。

2 个答案:

答案 0 :(得分:0)

事实证明,经过数周的努力才能弄清楚这一点,答案是@Panagiotis Kanavos和@CodeCaster的评论。

我使用的是一个看起来像逗号的Unicode字符,因此创建的行为与我期望的不同。

答案 1 :(得分:-4)

方法

public static void NursingHomeNamesCollection(string nursingHomeSection)

你输入字符串参数。在此方法范围之后,您将此字符串添加到静态集合中,但此范围中的 char

foreach (var item in homeNames)

您尝试一次添加一个角色并加入一个大字符串。您需要获取此方法的输入集合。