2017-02-23 62 views
0

我想設置一個數組的值,我從一個函數返回到一個屬性。使用返回的數組屬性

物業:

Public Property Labels()() As String() 

功能:(返回最後3天)

Public Function LabelDays(count As Integer) 
    Dim days(count) 

    days(0) = Date.Now.ToString("ddd") 
    count -= 1 

    If count > 0 Then 
    For i As Integer = 0 To count 
     days(i) = DateAdd(DateInterval.Day, i * -1, Date.Now).ToString("ddd") 
    Next 
    End If 

    Return days 
End Function 

用途:

Labels = LabelDays(3) 

我得到的ER像「對象不能轉換爲字符串」。 如果我直接設置值,它的工作原理。

'Labels = New String() {"We", "Tu", "Mo"} 

回答

0

你缺少你的日子數組定義As String,讓你在你的函數的返回數組是對象的數組。只是改變這一行:

Dim days(count) 

進入這個:

Dim days(count) As String 

這也是值得注意的是,你正在創建需要一個更加項數組,所以其實行應該是:

Dim days(count-1) As String 
+0

感謝,它的工作原理:) – juri

0

現有的代碼將0索引設置爲兩次,對於count的值將嘗試設置四個 ind exes(0,1,2和3)。但具體的錯誤是因爲你沒有爲days數組設置數據類型。沒有明確的類型,編譯器會選擇Object。當你嘗試將它分配給一個字符串時,你會得到這個問題的Object cannot be converted to String錯誤。函數定義也缺少一個類型。

總是爲變量設置數據類型,即使它只是使用類型推斷。你應該通過強制執行此選項打開選項嚴格

您還可以得到整體功能下降到一個班輪:

Function LabelDays(ByVal Count As Integer) As String() 
    Return Enumerable.Range(0, Count).Select(Function(d) Today.AddDays(d * -1).ToString("ddd")).ToArray() 
End Function 

雖然以使其更易於閱讀和維護,我想打破它一點:

Function LabelDays(ByVal Count As Integer) As String() 
    Dim range = Enumerable.Range(0, Count) 
    Dim result = range.Select(Function(d) Today.AddDays(d * -1).ToString("ddd")) 
    Return result.ToArray() 
End Function 

請注意,那些rangeresult變量仍然有明確的類型,因爲類型推斷和Option Infer,並且因爲我在我聲明它們的同時分配它們。

你也可以有樂趣的迭代器:

Iterator Function LabelDays(ByVal Count As Integer) As IEnumerable(Of String) 
    Dim current = Today 
    While Count > 0 
     Yield current.ToString("ddd") 
     current = current.AddDays(-1) 
     Count -= 1 
    End While 
End Function 

然後調用它像這樣:

Labels = LabelDays(3).ToArray() 
+0

感謝您的提示!但我標記了pikoh的答案,因爲他速度更快,同時也幫助了:) – juri