2011-03-22 13 views
6

SET'te bir dizeyi kabul edecek bir değişken tanımlamak istiyorum, ancak sonra bunu bir Int32'ye dönüştürecek ve bunu GET sırasında kullanacağım. İşteFarklı türlerde Get/Set

Şu anda var kodu:

private Int32 _currentPage; 

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

Sorunuz nedir? –

cevap

10

Ben açık bir Set yöntemi öneririm:

private int _currentPage; 

public int CurrentPage 
{ 
    get 
    { 
     return _currentPage; 
    } 
} 

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

Bir yan not olarak, ayrıştırma yöntemi iyi böyle yapabilirsiniz:

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

Bu biçimlendirme istisnalar önler.

+0

bir int dönen bir string özelliği. –

+0

Neden ayarlanmakta olan özellikle aynı türden bir argümanı almak için gizli bir yöntem kullanmalısınız? Onun sorusu içindeki örnek daha mantıklı. Setterde kodun olmasında yanlış bir şey yok. Yönteminiz farklı bir türden bir argüman aldıysa (örneğin int), o zaman ayarlayıcıdan ayrı olması mantıklı olacaktır. –

+0

@Tangled: Aynı türe sahip değil ... biri "int", diğeri "string" ... –

0

Ne var olması gerekenden yoludur. Aradığınız gibi otomatik dönüşüm yoktur.

+0

Eh, o sette geçersiz (diğer boş veriler hariç) verileri işlemek isteyebileceğini iddia ediyorum, ancak bunu yapmamanın da iyi nedenleri olabilir. –

3

Farklı türlere karşı kullanılan bir özelliğin & setine sahip olmasının gerçekten çok kötü bir fikir olduğunu unutmayın. Yöntemlerden birkaçının daha mantıklı gelmesi ve başka bir türden geçmesi bu özelliği havaya uçurur.

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

kötü bir fikir onun için doğru bir fikirdir :) –

0

Sihirli ayar ve ayar bloklarını kullanarak, döndürdüğünüz türden başka bir seçeneğiniz yoktur. Benim düşünceme göre, bunun üstesinden gelmenin en iyi yolu, çağıran kodun dönüşümleri yapmasını ve yalnızca türünü bir Int yapmasını sağlamaktır.

+0

Onları neden sihir olarak açıkladığını sorabilir miyim? – ChaosPandion

İlgili konular