我写了一个简单的程序来计算线性序列中的前5个数字。该程序最初是顺序的,涉及Main()中的sub以执行计算。然而,作为编码的相对初学者,我正在努力发展我对面向对象编程的理解,因此,作为一项挑战,我决定相应地重新编写程序。正如您将从下面的代码中看到的那样,我遇到了一个小难题,我希望你们中的一些人能够帮助我。
通过使用public sub,我可以通过在Main()中创建类的新实例并调用GetSequence来执行所需的任务......没有问题。但是,我不喜欢在类中使用Console.Write行的想法。如果我错了,请纠正我,但这不会否定创建类的真正目的,因为它删除了它的动态功能吗?
因此,作为替代方案,我尝试在公共函数中执行相同的计算,但不幸的是,在for循环中无法识别返回值。我确信有一种方法可以解决这个问题...我错过了一些明显的东西,但我无法看到它。
对此的任何帮助,一如既往,非常感谢。
Public Class Sequence
Public Property a As Integer
Public Property b As Integer
'Using Public Sub does the job, but it means using a
'Console.Write within the Sequence class, which I'm
'not too happy about.
Public Sub GetSequence()
For n = 1 To 5
Console.Write("{0}, ", a * n + b)
Next
End Sub
'I'd prefer to use a Public Function, but how do I
'return the value of the function through each iteration
'of the 'for' loop?
Public Function GetSequence(ByVal a As Integer, ByVal b As Integer)
For n = 0 To 5
Return a * n + b
Next
End Function
Public Sub New(ByVal a As Integer, ByVal b As Integer)
Me.a = a
Me.b = b
End Sub
End Class
答案 0 :(得分:0)
对于这个小例子,你可以创建一个字符串并重复追加它(同时确保声明函数的返回类型 - 在项目范围内启用Option Strict
):
Public Function GetSequence(a As Integer, b As Integer) As String
Dim result As String = ""
For n = 0 To 5
result &= (a * n + b) & ", "
Next
Return result
End Function
LINQ更好,但可能比你现在想要的更先进。
Public Function GetSequence(a As Integer, b As Integer) As String
Return String.Join(
", ",
From n In Enumerable.Range(0, 6) Select (a * n + b).ToString()
)
End Function