根据使用场景的不同,字符串显示方式不同
问题描述:
使用正在加载到可观察集合中的JSON数据获取一些奇怪的行为。根据使用场景的不同,字符串显示方式不同
下面是JSON导入的示例,以及我的文件夹路径的显示方式。
{
"projectNumber":"16000",
"projectName":"Sample Project",
"Directory":"@\"C:\\Users\"", }
到目前为止,我已经能够使用加载到我的observablecollection后的预期数据。例如,消息框在消息框中显示(selectedfolder)如下:@“C:\ Users”
这是我希望我的树视图使用的路径。奇怪的是,它并没有使用它,而是从我的JSON导入代替使用原始路径格式(“@ \”C:\ Users \“”),并引发“路径中的非法字符”错误。
private void ListDirectory(TreeView treeView, string path)
{
treeView.Items.Clear();
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Items.Add(CreateDirectoryNode(rootDirectoryInfo));
}
private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeViewItem { Header = directoryInfo.Name };
foreach (var directory in directoryInfo.GetDirectories())
directoryNode.Items.Add(CreateDirectoryNode(directory));
foreach (var file in directoryInfo.GetFiles())
directoryNode.Items.Add(new TreeViewItem { Header = file.Name });
return directoryNode;
}
private void button_Click(object sender, RoutedEventArgs e)
{
Project selectedProject = comboBox.SelectedItem as Project;
selectedfolder = selectedProject.Directory.ToString();
MessageBox.Show(selectedfolder);
if (selectedProject != null)
{
this.ListDirectory(treeView, selectedfolder);
}
有人看到我在这里失踪了,以及为什么相同的字符串会出现不同的取决于它如何使用?
答
@""
字符串文字用于帮助编写带有反斜杠字符串的代码。这段代码,例如,包含一个有效的路径参考,并@""
位只是告诉C#编译器把反斜线不同于正常的C风格的字符串:
string example1 = @"C:\Users";
Debug.WriteLine(example1); // Outputs C:\Users
// This works
var temp1 = new DirectoryInfo(example1);
一旦你真正嵌入@""
位在一个字符串中,最后会出现一个字符串,其中包含@
和"
个字符,这不会成为Windows上的有效路径。
string example2 = "@\"C:\\Users\"";
Debug.WriteLine(example2); // Outputs @"C:\Users"
// This throws an exception
var temp2 = new DirectoryInfo(example2);
换句话说:使用@""
是罚款C#代码,但对于一个JSON对象,你需要改变你的JSON文字是这样的,用\
逃脱字符,所以它是有效的JSON解串器完成解析字符串后的路径:
{
"projectNumber":"16000",
"projectName":"Sample Project",
"Directory":"C:\\Users",
}
答
这显然是答案。非常感谢,Anon!抛弃我的是字符串如何在一个消息框中显示,完全如何在路径引用中使用它。新手错误!