0

我正在尝试将这几行 C# 转换为 Vb 几个小时,但我无法使其工作。

Friend Shared Function GetErrorCorrectPolynomial(ByVal errorCorrectLength As Integer) As tPolynomial
    Dim a As tPolynomial

    a =  New tPolynomial(New DataCache() With {1}, 0)

    For i As Integer = 0 To errorCorrectLength - 1
        a = a.Multiply(New tPolynomial(New DataCache() With { 1, tMath.GExp(i) }, 0))
    Next i

    Return a
End Function

我收到此错误 在对象初始化程序中初始化的字段或属性的名称必须以“。”开头

在这部分{1}

原始代码

internal static tPolynomial GetErrorCorrectPolynomial(int errorCorrectLength)
{
    tPolynomial a = new tPolynomial(new DataCache() { 1 }, 0);

    for (int i = 0; i < errorCorrectLength; i++)
    {
        a = a.Multiply(new tPolynomial(new DataCache() { 1, tMath.GExp(i) }, 0));
    }

    return a;
}

编辑添加 Datacache 类

Friend Class DataCache
    Inherits List(Of Integer)

    Public Sub New(ByVal capacity As Integer)
        MyBase.New()
        For i As Integer = 0 To capacity - 1
            MyBase.Add(0)
        Next i
    End Sub

    Public Sub New()
        MyBase.New()
    End Sub


End Class
4

3 回答 3

5

看起来您正在尝试使用集合初始值设定项。使用From关键字,如下所示:

New DataCache() From { 1, tMath.GExp(i) }
于 2012-10-08T03:21:39.827 回答
0

我不认识您使用的 C#,但 VBWith关键字用于设置初始化对象的属性。

New Foo() With { .Bar = 1 }

其中 Foo 是类,Bar 是属性。

请参阅:http: //msdn.microsoft.com/en-us/library/bb385125.aspx

这与 C# 初始化对象属性的方式相同,只是 C# 省去了“ .

new Foo() { Bar = 1 }

请参阅:http: //msdn.microsoft.com/en-us/library/bb384062.aspx

于 2012-10-06T03:55:11.020 回答
0

看起来 DataCache 和 Int32 (int/Integer) 之间存在隐式转换,在这种情况下,您应该删除 With 关键字:

a = New tPolynomial(New DataCache() {1}, 0)
于 2012-10-06T07:58:19.280 回答