2015-12-11 82 views
0
var temp = toCheck.GetData(DataFormats.FileDrop); 

我在程序中有上面的代碼。 toCheck是一個IDataObjecct,它包含一個文件(圖像是特定的)路徑。在C中獲取var類型值#

當調試,我看到下存儲爲這樣的值:
溫度 - > {串[1]}
[0] - > 「C:\ ....路徑的其餘部分」

一切正常,但當我嘗試訪問裏面的字符串時,我不能。如果我使用toString()方法,它會返回System.String []而不是文件路徑。
關於如何檢索變量內的文件路徑的任何建議?

回答

1

temp是一個字符串數組,這就是爲什麼你得到這個。如果你想獲得數組的第一個字符串,然後:

var mystring = temp[0]; 

這應該做

你也可以檢查字符串[]與任何字符串:

if(temp.Length > 0) myString = temp[0]; 

其中myString是一個變量的類型string

+0

這將是一個更好的答案,如果你提供了,爲什麼,解決了他的問題的細節 –

+0

你應該解釋爲什麼應該這樣做 –

+0

我認爲現在是最好 –

2

temp -> {string[1]}意味着temp是一個數組類型string與一個元素。

[0] -> "C:\....rest of path"表示索引爲0的元素等於路徑。

由於GetData返回的字符串數組裝成object,因此您還必須首先對其進行取消裝箱。然後你可以簡單地訪問這樣的元素:

string[] strArr = temp as string[]; 
string s = temp[0]; 
+0

謝謝岡瑟,我應該提到,我想這一點。 當我設置 string s = temp [0]; 我收到以下錯誤:無法將[]用[]指定到'object'類型的表達式 這是我的困惑來自的地方。我認爲這將是臨時[]訪問字符串,但它似乎並不那麼容易。 – user4238148

+0

@ user4238148 Woops!忘記了「對象」的拆箱。我更新了答案。 – Foggzie

0

我找到了答案!

string[] arr = ((IEnumerable)temp).Cast<object>().Select(x => x.ToString()).ToArray(); 

使用上述語句,您可以從類型對象轉到字符串數組。
您需要包含using.System.Linq才能使用。

var temp = toCheck.GetData(DataFormats.FileDrop); 
     string[] arr = ((IEnumerable)temp).Cast<object>().Select(x => x.ToString()).ToArray(); 
     string path = ""; 

     foreach(string a in arr) 
      path = a; 

這結束了所有的代碼,如果有人好奇。我遍歷數組,因爲否則在我調試時會跳過該函數的其餘部分。不知道是什麼導致這個,但這個工程。感謝大家的幫助!