【问题标题】:Use returned Array for Property使用返回的数组作为属性
【发布时间】:2017-07-14 02:32:23
【问题描述】:

我想设置一个数组的值,我从一个函数返回到一个属性。

属性:

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)

我收到“对象无法转换为字符串”之类的错误。 如果我直接设置值,它可以工作。

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

【问题讨论】:

    标签: arrays vb.net properties


    【解决方案1】:

    现有代码设置0 索引两次,对于count 值3 将尝试设置四个 索引(0、1、2 和3)。但具体的错误是因为您没有为days 数组设置数据类型。如果没有显式类型,编译器将选择Object。然后,当您尝试将其分配给字符串时,您会从问题中得到 Object cannot be converted to String 错误。函数定义也缺少类型。

    始终为您的变量设置数据类型,即使它只是使用类型推断。您应该通过开启 Option Strict 来强制执行此操作!

    您还可以将整个功能简化为单行:

    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()
    

    【讨论】:

    • 感谢您的提示!但我标记了 pikoh 的答案,因为他速度更快,而且也有帮助:)
    【解决方案2】:

    您的 days 数组定义中缺少 As String,因此您在函数中返回的数组是一个对象数组。只需更改此行:

    Dim days(count)
    

    进入这个:

    Dim days(count) As String
    

    还值得注意的是,您正在创建一个需要的项目数组,因此该行实际上应该是:

    Dim days(count-1) As String
    

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2017-06-06
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多