Проблема
Когда я передаю значение в переменную int
, где значение превышает максимальное значение для int
, значение переменной int
становится 0
.
Фон
Я использую следующие шаги для извлечения моих данных.Я не использую блок try-catch без исключения.
Шаг 1
В моей WCF Service я получаю DataTable
, используя IBM.Data.DB2.iSeries.iDB2DataAdapter.Fill(DataSet)
Шаг 2
Затем я преобразую DataTable
в List<T>
, используя код:
public static List<T> DataTableToList<T>(DataTable dt)
{
List<T> tableEntity = new List<T>();
foreach (DataRow row in dt.Rows)
{
T rowEntity = Activator.CreateInstance<T>();
rowEntity.GetType().GetProperties().Where(o => dt.Columns.OfType<DataColumn>()
.Select(p => p.ColumnName).Contains(o.Name)).ToList()
.ForEach(o => o.SetValue(rowEntity, row[o.Name], null));
tableEntity.Add(rowEntity);
}
return tableEntity;
}
с типом:
public class Client
{
public int ID { get; set; }
public string Name { get; set; }
}
Шаг 3
Я возвращаю его, используя метод службы WCF:
[OperationContract]
public string GetClients()
{
List<Client> clients = new DB().RetrieveClients();
return Tools.SerializeObjectToXML<List<Client>>(clients);
}
с вспомогательным методом для сериализации:
public static string SerializeObjectToXML<T>(T item)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
using (StringWriter writer = new StringWriter())
{
xs.Serialize(writer, item);
return writer.ToString();
}
}
Шаг 4
Затем в клиентском приложении 1042 * я извлекаю его из справочника услуг 1044 * с привязкой по умолчанию WSHttpBinding с кодом:
List<Client> clients = Tools.DeserializeXMLToObject<List<Client>>(new SomeServiceClient().GetClients());
с помощью вспомогательного метода для десериализации:
public static T DeserializeXMLToObject<T>(string xmlText)
{
if (string.IsNullOrEmpty(xmlText)) return default(T);
XmlSerializer xs = new XmlSerializer(typeof(T));
using (MemoryStream memoryStream = new MemoryStream(new UnicodeEncoding().GetBytes(xmlText)))
using (XmlTextReader xsText = new XmlTextReader(memoryStream))
{
xsText.Normalization = true;
return (T)xs.Deserialize(xsText);
}
}
Вопрос
MSDN говорит , что:
Когда вы конвертируете из double или значение с плавающей запятой для целочисленного типа, значение усекается.Если полученное целое значение выходит за пределы диапазона целевого значения, результат зависит от контекста проверки переполнения.В проверенном контексте создается исключение OverflowException, тогда как в непроверенном контексте результатом является неопределенное значение типа назначения.
- Почему значение
Client.ID
становится 0
когда значение из базы данных превышает максимально допустимое для int? - Это потому, что это непроверенный контекст?Если да, откуда мне знать?
Мой код находится на C #, framework 4, встроен в VS2010 Pro.
Пожалуйста, помогите, заранее спасибо.