Error left hand side of an assignment must be a variable

I am currently converting from Vb6 to C# where the below Vb6 code is allowed :

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

Not Allowed:

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

The gNoseLo has been defined in VB6 as Private Property Get gNoseLo(Optional bResolve As Boolean). I cannot use a public property approach in C# since there are parameters so I used a method. What would be the correct way to recode the gNoseLo to accept value assignment and prevent the error?

Jon Skeet
people
quotationmark

A "property with a parameter" in C# is an indexer. You can't give it a name like you can in VB though1. You declare it like this:

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

Now that may or may not be appropriate for your use case. Alternatives are:

  • Have a regular property that returns something with an indexer:

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

    Then you could use foo.NoseLo[true] = 0

  • Use Get and Set methods:

    SetNoseLo(true, 0);
    

1 Well, you specify a name, but not use it by that name.

people

See more on this question at Stackoverflow