2014-07-25 42 views
-2

我嘗試這個C++代碼轉換爲C#:在C#數組和運算符在結構中重載,從C++到c#?

struct gene 
{ 
int alleles[4]; 
int fitness; 
float likelihood; 

    // Test for equality. 
    int operator==(gene gn) 
    { 
     for (int i=0;i<4;i++) 
     { 
      if (gn.alleles[i] != alleles[i]) return false; 
     } 

     return true; 
    } 
}; 

BCS告訴我,我不能除了在操作錯誤結構內使陣列==超載,因此,如何它會在C# ?

+0

如果您希望我們幫你解決這個問題,您應該爲您提供您有解決方案。 – Servy

+1

不要在C#中使用'struct',而是使用'class'。它不是*與C++'class' /'struct'差別相同! – crashmstr

回答

0

C#中的運算符需要是公共靜態的。 ==運算符還需要兩個對象作爲參數才能進行比較,如果要定義==運算符,還需要定義!=運算符。

試試這個:

public struct Gene 
{ 
    int[] alleles; 
    int fitness; 
    float likelihood; 

    public Gene(int[] alleles) : this() 
    { 
     this.alleles = alleles; 
    } 

    // Test for equality. 
    public static bool operator ==(Gene gn1, Gene gn2) 
    { 
     for (int i=0; i < gn1.alleles.Length ;i++) 
     { 
      if (gn1.alleles[i] != gn2.alleles[i]) return false; 
     } 

     return true; 
    } 

    public static bool operator !=(Gene gn1, Gene gn2) 
    { 
     return !(gn1 == gn2); 
    } 
} 
+1

非常感謝你幫助理解和解決問題,但是如果我可以問一下,我怎樣才能使固定大小的數組與等位基因相同[4]?可能需要添加構造函數?要麼 ? – mramee

+0

是的,我認爲將它添加到構造函數是最好的解決方案。我將它添加到我的答案中。 –

+0

非常感謝 – mramee