2010-03-11 17 views
0

En C#, vous ne pouvez pas avoir de propriétés indexées. Cela dit, comment puis-je convertir le code suivant de VB.net en C#?Conversion de VB.NET en C#

Private _PatchSpectrum(49) As Double 

Public ReadOnly Property GetPatchSpectrum() As Double() 
    Get 
     Return _PatchSpectrum 
    End Get 
End Property 

Public WriteOnly Default Property PatchSpectrum(idx As Integer) As Double 
    Set(ByVal value as Double) 
     _PatchSpectrum(idx) = value 
    End Set 
End Property 
+0

« comme en C# vous ne pouvez pas passer des paramètres » Pour l'ensemble, oui vous pouvez. Il a juste la valeur par défaut avec le type qui est retourné. – Powerlord

+2

Je ferai remarquer que retourner le tableau n'est généralement pas la meilleure des idées, et la propriété 'GetPatchSpectrum' n'est pas très bien nommée (ressemble beaucoup à une méthode). –

Répondre

9

Tu ferais cela comme:

private double[] _PatchSpectrum = new double[49] 

public double[] GetPatchSpectrum 
{ 
    get { return _PatchSpectrum; } 
} 

public double this[int index] 
{ 
    set { this._PatchSpectrum[index] = value; } 
} 
0

Vous pouvez définir un indexer sur votre objet, qui est de savoir comment les classes de collection comme List travail. E.g:

public double this[int i] 
    { 
     get 
     { 
      // This indexer is very simple, and just returns or sets 
      // the corresponding element from the internal array. 
      return _PatchSpectrum[i]; 
     } 
     set 
     { 
      _PatchSpectrum[i] = value; 
     } 
    } 
+0

C'est le code correct, mais différent de la version originale de VB.NET ... –

+0

Je voulais retourner le tableau entier – user291660

+0

Ah ouais, c'est juste le bit d'indexeur. Comme indiqué ci-dessus, il n'y a pas de truc pour retourner un tableau, vous créez simplement une propriété pour le retourner. Si vous ne voulez pas la méthode 'get {}' vous pouvez l'élider. – dsolimano

0

Pour les futures conversions de code, consultez le Telerik Code Converter.

+2

Malheureusement, le convertisseur de code ne gère pas correctement ce cas. –

+0

J'ai utilisé Telerik pour le reste du code mais cela a échoué car C# n'accepte pas la propriété avec les paramètres. – user291660

1

Ou avec des méthodes au lieu de propriétés:

double[] _patchSpectrum = new double[49]; 

public void SetPatchSpectrum(int index, double value) 
{ 
    _patchSpectrum[index] = value; 
} 

public double[] GetPatchSpectrum() 
{ 
    return _patchSpectrum; 
} 
+0

Votre réponse est également correcte. – user291660