2016-01-13 100 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

相關問題