Giriş
Açıklaması şöyle
Count() metodu şöyle. Metodun baş tarafını kalabalık yapmasın diye sildim.
Şu kod taşma olduğu için OverflowException fırlatır.
Diğer
Convert sınıfı taşmayı kendisi kontrol ediyor.
Açıklaması şöyle
ÖrnekThe checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.
Count() metodu şöyle. Metodun baş tarafını kalabalık yapmasın diye sildim.
// System.Linq.Enumerable
using System.Collections;
using System.Collections.Generic;
public static int Count<TSource>(this IEnumerable<TSource> source)
{
...
int num = 0;
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num = checked(num + 1);
}
return num;
}
}
Bu kodda neden checked kontrolü olduğunun açıklaması şöyle. Eğer veri yapısında 2 milyardan fazla nesne varsa int'e sığmayacağı yani overflow (taşma) olacağı için checked ile kullanılıyor.Because it doesn't want to return a negative number in the (admittedly unlikely) event that there are more than 2-billion-odd items in the sequence - or a non-negative but just wrong number in the (even more unlikely) case that there are more than 4-billion-odd items in the sequence. checked will detect the overflow condition.Örnek
Şu kod taşma olduğu için OverflowException fırlatır.
checked
{
int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = (int)longValue;
}
Örnek
Şu kod taşma olduğu için OverflowException fırlatır.
checked {
int a = int.MaxValue;
int b = int.MaxValue;
int c = a * b; // kaboom
}
Convert sınıfı taşmayı kendisi kontrol ediyor.
var convertedDouble = Convert.ToInt64(maxDouble); //** OverflowException
Hiç yorum yok:
Yorum Gönder