2016-01-13 6 views
1

я в настоящее время преобразования из 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 
} 

The gNoseLo был определен в VB6, как Private Property Get gNoseLo(Optional bResolve As Boolean). Я не могу использовать подход публичного свойства в C#, так как есть параметры, поэтому я использовал метод. Каким будет правильный способ перекодировать gNoseLo, чтобы принять присвоение значения и предотвратить ошибку?

+0

Передайте значение в качестве дополнительного аргумента? –

+0

И вам действительно нужен аргумент? Для чего это? Что делает функция? Может быть, вам стоит подумать о редизайне, когда вы переводите код? –

+0

Оригинальный VB6 не должен выглядеть так, потому что это даже не действительный синтаксис. – Bob77

ответ

2

«Свойство с параметром» в C# является индексом . Вы не можете назвать это имя, как в 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

  • Использования Get и Set методы:

    SetNoseLo(true, 0); 
    

Ну, вы задаете имя, но не использовать его по это имя.

+0

John Skeet, я ценю помощь! Спасибо. – Ken