2016-01-13 101 views
1

我目前从VB6转换为C#,其中下面VB6代码被允许:错误左手侧-的-AN-赋值必须待一个可变

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接受赋值和防止错误的正确方法?

+0

传递值作为一个额外的参数? –

+0

你真的*需要争论吗?它是为了什么?这个函数做什么?也许你应该在翻译代码时考虑重新设计? –

+0

原来VB6不能像她那样,因为这甚至不是有效的语法。 – Bob77

回答

2

A “属性与参数” 在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

  • 使用GetSet方法:

    SetNoseLo(true, 0); 
    

嗯,你指定一个名称,而不是由使用它这个名字。

+0

约翰Skeet,我感谢帮助!谢谢。 – Ken

相关问题