2011-03-22 15 views
6

Me gustaría definir una variable que aceptará una cadena en el SET, pero luego la convertirá en Int32 y la usará durante el GET.Obtener/establecer como tipos diferentes

Aquí el código que tengo actualmente:

private Int32 _currentPage; 

public String currentPage 
{ 
    get { return _currentPage; } 
    set 
    { 
     _currentPage = (string.IsNullOrEmpty(value)) ? 1 : Convert.ToInt32(value); 
    } 
} 
+0

¿Cuál es tu pregunta? –

Respuesta

10

que sugeriría un método explícito Set:

private int _currentPage; 

public int CurrentPage 
{ 
    get 
    { 
     return _currentPage; 
    } 
} 

public void SetCurrentPage(string value) 
{ 
     _currentPage = (string.IsNullOrEmpty(value)) ? 1 : Convert.ToInt32(value); 
} 

Como nota al margen, el método de análisis puede hacerlo mejor la siguiente manera:

if (!int.TryParse(value, out _currentPage) 
{ 
    _currentPage = 1; 
} 

Esto evita las excepciones de formato.

+0

una propiedad de cadena que devuelve un int. –

+0

¿Por qué tendría un método discreto para la configuración que toma un argumento que es del mismo tipo que la propiedad que se está configurando? El ejemplo en su pregunta tiene más sentido. No hay nada de malo en tener un código en un setter. Si su método tomó un argumento de un tipo diferente (digamos, int), entonces tendría sentido que estuviera separado del colocador. –

+0

@Tangled: No tiene el mismo tipo ... uno es 'int', y uno es' string' ... –

0

Lo que tenemos es la forma en que tiene que ser. No hay conversiones automáticas como las que está buscando.

+0

Bueno, yo diría que puede querer manejar datos inválidos (que no sean nulos) en el conjunto, pero también puede tener buenas razones para no hacerlo. –

3

Tenga en cuenta que esta es realmente una mala idea tener una propiedad obtener & conjunto que se utiliza contra diferentes tipos. Puede haber un par de métodos que tengan más sentido, y pasar cualquier otro tipo simplemente explotaría esta propiedad.

public object PropName 
{ 
    get{ return field; } 
    set{ field = int.Parse(value);    
} 
+1

mala idea es la idea correcta para él :) –

0

Usando los bloques de obtención mágica y configuración, no tiene más remedio que tomar el mismo tipo que devuelve. En mi opinión, la mejor manera de manejarlo es hacer que el código de llamada haga las conversiones y simplemente convertir el tipo en Int.

+0

¿Puedo preguntarte por qué los describes como magia? – ChaosPandion

Cuestiones relacionadas