我有一个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查询的代码来重现这一点。我尝试制作一个新列表并通过相同的代码传递该列表,但不会发生错误。我很抱歉,但我无法发布一个可以复制的例子。
答案 0 :(得分:0)
事实证明,经过数周的努力才能弄清楚这一点,答案是@Panagiotis Kanavos和@CodeCaster的评论。
我使用的是一个看起来像逗号的Unicode字符,因此创建的行为与我期望的不同。
答案 1 :(得分:-4)
方法
public static void NursingHomeNamesCollection(string nursingHomeSection)
你输入字符串参数。在此方法范围之后,您将此字符串添加到静态集合中,但此范围中的项是 char 。
foreach (var item in homeNames)
您尝试一次添加一个角色并加入一个大字符串。您需要获取此方法的输入集合。