2013-07-03 156 views
0

我的工作是與SharePoint 2010接口的應用程序,而SP的一個對象(SPFolder.Subfolders[index]如果你好奇)需要一個字符串來索引它返回的項目。問題是我需要傳遞一個字符串變量,但它只接受文字。有沒有一種方法可以將變量轉換爲文字?如果問題是不夠清楚,見下圖:C# - 把一個字符串變量轉換爲字符串字面

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創建剩餘的文件夾。抓取新創建的文件夾是我遇到麻煩的地方,因爲用我剛剛用來創建它的字符串索引父文件夾就是它發瘋的地方。

+0

你可以做字符串newFolder = @「新建文件夾名稱」; ? – Sherlock

+0

只是給了它一個鏡頭,沒有運氣:/ – thanby

回答

1

的例子從文檔顯示了通過整數指數在那裏你可以檢查名稱訪問。不是最優雅,但將努力

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

+0

這應該在理論上工作,但需要大量額外的代碼來返回int索引,所以如果我可以避免它會很好。如果確實這是唯一的解決方案,我會隨之而去。感謝您的想法! – thanby

+0

是的,你可以明顯地用LINQ選擇輔助方法快捷方式..這將比for循環方式更快。不理想,但希望功能。 'MyCollection.Select(M => m.Name == myNameVariable).FirstOrDefault()' – mckeejm

2

這些都是相同的:

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

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

在你的榜樣,字符串有不同的價值觀,這將導致不同的結果。

+0

在實際應用中,它沒有區別。文件夾對象使用字符串創建,然後將相同的字符串傳遞給索引。我上面給出的例子並不是字面意義上的通過(沒有雙關語)。我已經修正了這個例子來清除這個問題。 – thanby

+0

@thanby我懷疑這些字符串實際上是不同的。通過檢查「Literal文件夾名稱」== folderName'是否爲true來嘗試調試。 –

+0

已經做到了。跟蹤顯示'newFolder'變量的每個實例都是一致的,即使是失敗的實例。在循環的每次迭代中,相同的變量用於幾個不同的點,並且這只是在這裏失敗。我很確定這是SharePoint挑剔的錯。如果我不得不採用WILD猜測,那實際上並不是將文字發送給對象類,而是發送引用,而類不希望查找引用。所以跟蹤顯示正確的文字,因爲它查看它,而類沒有。那有意義嗎? – thanby

0

您是否嘗試過使用逐字字符串?

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

MSDN也有字符串和逐字字符串之間的區別一個很好的解釋。

+0

我沒有真正嘗試。不幸的是它產生了相同的結果。還是)感謝你的建議! – thanby