一个签名的左侧和右侧错误-必须是一个变量

本文关键字:一个 变量 错误 | 更新日期: 2023-09-27 18:30:01

我目前正在从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
}

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

一个签名的左侧和右侧错误-必须是一个变量

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好吧,你指定了一个名称,但不能通过这个名称来使用它。