2009-03-10 10 views
4

Veri okuyucum var. İçindeki değeri 42 değeriyle karşılaştırmak istiyorum. Bunun integral bir tür olduğunu biliyorum (ör. MySQL'in INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT, JUMBODELUXEINT, vb.). Gerçek türü C# koduna bağlamak istemiyorum. Geldiğim en iyisiBu nesne, ayrılmaz bir türüdür. Değerini beş satırdan daha az kodla alabilir miyim?

Bu inanılmaz derecede uzun ömürlü görünüyor. Equals kullanmayı denedim, ancak aynı değere sahip farklı integral türleri eşit olarak görünmüyor.

Daha iyi bir yolu var mı?

+0

ayrılmaz ya interger-al? – StingyJack

+0

Kullanım uint k = x uint mi? (uint) x: (uint) Convert.ToInt32 (x)); '. Bir açıklama için Jon Skeet'in yanıtını genişleten http://stackoverflow.com/questions/10022383/ adresine bakın. –

cevap

9

Sadece evet, iyi çalışıyor ... Convert.ToUInt32(object) kontrol: Diğer bir deyişle

using System; 

class Test 
{ 
    static void Main() 
    { 
     Check((byte)10); 
     Check((short)10); 
     Check((ushort)10); 
     Check((int)10); 
     Check((uint)10); 
    } 

    static void Check(object o) 
    { 
     Console.WriteLine("Type {0} converted to UInt32: {1}", 
          o.GetType().Name, Convert.ToUInt32(o)); 
    } 
} 

, kodunuz olabilir: Verilen Alternatif

object x = reader.GetValue(i); 
uint k = Convert.ToUInt32(x); 
if (k == 42) { ... } 

, tüm uint s olduklarını Bir veri okuyucuyu kullanıyorsanız, uzun olarak gösterilebilir reader.GetInt64(i)? Dönüşümün sizin için yapılıp yapılmayacağını bilmiyorum, ama muhtemelen denemeye değer.

+0

'10' yerine -10’u takın ve ne olduğunu izleyin. Bkz. Http://stackoverflow.com/questions/10022383 –

6
if(Convert.ToUInt32(reader.GetValue(i)) == 42) { ... } 
0

Ben doğru anlamak emin değilim ama bu çalışması gerekir düşünüyorum:

int x = int.Parse(reader.GetValue(i).ToString()); 
if(x == 42) { // do your logic } 
+0

Bir şeyi bir dizgeye dönüştürme ve geri dönüştürme, basit bir sayısal dönüşüm olan IMO'yu yapmak için oldukça çirkin bir yöntem gibi görünüyor. –

+0

Anlaştık! aslında Convert.ToX'un nasıl çalıştığını bilmiyorum ama bunu bir dizeye dönüştürmek zorunda olduğunu düşünürdüm. – Galilyou

2

Yapabilirsin de yapmak böyle tersten Skeet en ve Daniel'in cevaplar:

if (k == Convert.ChangeType(42, k.GetType()) { ... } 

ben Yine de test etmedim.

+0

+1 Sadece odadaki ucube olduğu için tersi yapmak zorunda! :) –

0

Bu deneyebilirsiniz:

unit k = Convert.ToUInt32(x); 

Gerçi senin değişkenleri yeniden adlandırma sunulan daha iyi olurdu. 1 harfli değişken numaralı telefondan geçen hafta sooo.

+0

Bu gerçek kod değil ve eğer C# bu alerjiye sahip değilse, birbirleriyle numaraları karşılaştıramazsa, değişken bir isme sahip olmanız gerekmeyecek ...! – pdc

+0

Statik olarak yazılan bir dil kullanmak için ödediğiniz ücrettir. Neal Ford buna "bürokrasi" diyor. –

0

Bu çalışması gerekir:

object x = reader.GetValue(i); 

uint k; 
try 
{ 
    k = Convert.ToUInt32(x); 
} 
catch(InvalidCastException e) { ... } 
if (k == 42) { ... } 
İlgili konular