错误左侧的任务必须是变量

时间:2016-01-13 07:11:15

标签: c# vb6

我目前正在从Vb6转换为C#,其中允许使用以下Vb6代码:

Private Property Let gUnit(Optional bResolve As Boolean, aNoseHi)
    gNoseLo(Optional parameter) = 0  
End Property

不允许:

void Test()
{
    gNoseLo(false) = 0   //error occurs here
}

gNoseLo已在VB6中定义为Private Property Get gNoseLo(Optional bResolve As Boolean)。我不能在C#中使用公共属性方法,因为有参数所以我使用了一个方法。重新编码gNoseLo以接受值赋值并防止错误的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

C#中的“带参数的属性”是索引器。虽然 1 ,但你无法在VB中为它命名。你声明它是这样的:

public int this[bool parameter]
{
    get { ... }
    set { ...}
}

现在可能适用于您的用例,也可能不适用。替代方案是:

  • 使用索引器返回的常规属性:

    public class IndexedByBoolean
    {
        public int this[bool parameter]
        {
            get { ... }
            set { ...}
        }
    }
    
    public class ContainsPropertyIndexedByBool
    {
        private readonly IndexedByBoolean index;
    
        public IndexedByBoolean NoseLo { get { return index; } }
    }
    

    然后您可以使用foo.NoseLo[true] = 0

  • 使用GetSet方法:

    SetNoseLo(true, 0);
    

1 好吧,你指定一个名字,但不要用 这个名字。