【问题标题】:c# - Turning a string variable into a string literalc# - 将字符串变量转换为字符串文字
【发布时间】:2013-07-03 15:12:18
【问题描述】:

我正在开发一个与 SharePoint 2010 交互的应用程序,其中一个 SP 对象(如果您好奇的话,SPFolder.Subfolders[index])需要一个字符串来索引它返回的项目。问题是我需要向它传递一个字符串变量,但它只接受文字。有没有办法为此目的将变量转换为文字?如果问题不够清楚,请参见下图:

SPFolder folder = rootFolder.SubFolders["Literal folder name"];  // This properly searches the collection (which has already been defined) and returns the folder with the name specified by the literal.

string newFolder = "Literal folder name";  // In this case I'm trying to pass this string as the index.
SPFolder folder = rootFolder.SubFolders[newFolder];  // This is where it throws a "Value does not fall within the expected range" exception when the string is referenced.

如果上下文有帮助,应用程序将获取一组文件夹名称并在库中的特定级别创建它们,然后循环遍历新文件夹以在其中构建复杂的文件夹结构。为此,我必须创建一个文件夹,获取其 url,然后基于该 url 创建其余文件夹。获取新创建的文件夹是我遇到麻烦的地方,因为用我刚刚用来创建它的字符串索引父文件夹是它变得疯狂的地方。

【问题讨论】:

  • 你能做吗 string newFolder = @"新文件夹名"; ?
  • 只是试了一下,没有运气:/

标签: c# string sharepoint indexing string-literals


【解决方案1】:

这些都是一样的:

 SPFolder folder = rootFolder.SubFolders["Literal folder name"];

 string folderName = "Literal folder name";
 SPFolder folder = rootFolder.SubFolders[folderName];

在您的示例中,字符串具有不同的值,这将导致不同的结果。

【讨论】:

  • 在实际应用中,没有区别。文件夹对象是用一个字符串创建的,然后将相同的字符串传递给索引。我上面给出的例子并不是真正传递的内容(不是双关语)。我已经更正了示例以清除它。
  • @thanby 我怀疑这些字符串实际上是不同的。通过检查"Literal folder name" == folderName 是真还是假来尝试调试。
  • 已经做到了。跟踪显示newFolder 变量的每个实例都是一致的,即使是它失败的那个。在循环的每次迭代中,相同的变量在几个不同的地方使用,它只是在这里失败。我很确定这是 SharePoint 挑剔的错。如果我不得不大胆猜测,它实际上并不是将文字发送到对象类,而是发送引用,并且该类不愿意查找引用。所以跟踪显示了正确的文字,因为它查找它,而类没有。这有意义吗?
【解决方案2】:

文档中的示例显示了通过整数索引进行访问,您可以在其中检查名称。不是最优雅的,但可以工作

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfoldercollection(v=office.14).aspx

【讨论】:

  • 理论上应该可行,但是需要大量额外的代码来返回 int 索引,所以如果我可以避免它,那就太好了。但是,如果它确实是唯一的解决方案,我会选择它。感谢您的想法!
  • 是的,您显然可以使用 LINQ 选择帮助器方法对其进行快捷方式。这将比 for 循环样式快得多。不理想,但希望能发挥作用。 MyCollection.Select(m => m.Name == myNameVariable).FirstOrDefault()
【解决方案3】:

您是否尝试过使用逐字字符串文字?

var testString = @"This is a verbatim string literal";

MSDN 也很好地解释了字符串文字和逐字字符串文字之间的区别。

【讨论】:

  • 我确实试过这个。不幸的是,它产生了相同的结果。不过感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 2011-02-03
相关资源
最近更新 更多