C # Как проверить, есть ли значение перед преобразованием ToString () - PullRequest
2 голосов
/ 13 октября 2010

У меня есть набор данных значений, которые мне нужно поместить в текстовое поле. Однако в моем наборе данных есть некоторые значения типа decimal и double, поэтому мне нужно привести их toString(). Кроме того, иногда значения набора данных пусты, поэтому перед приведением toString() мне нужно проверить, есть ли на самом деле значение или нет. Это образец строки:

Мне нужен код, который делает что-то вроде этого ...

if(ds.Tables[0].Rows[0].Field<decimal>("IndexPrethodni") !=null or something){
    Convert.ToString(ds.Tables[0].Rows[0].Field<decimal>("IndexPrethodni"));
}

Я знаю, что десятичный тип не может быть обнуляемым. Есть ли простое решение для достижения желаемого результата?

Ответы [ 8 ]

3 голосов
/ 13 октября 2010

Лично я бы обернул это так:

        var col = ds.Tables[0].Columns["IndexPrethodni"];
        var row = ds.Tables[0].Rows[0];
        if (!row.IsNull(col))
        {
            string s = row[col].ToString();
            ...
        }

(«через столбец объект» является самым прямым (= самым быстрым) индексатором)

2 голосов
/ 13 октября 2010

Я обычно использую такой метод, как:

public T GetValue<T>(object source)
{
  if (Convert.IsDBNull(source))
    return default(T);

  return (T)source;
}

Например,

using (var reader = command.ExecuteReader())
{
  if (reader.Read())
  {
    return GetValue<string>(reader["SomeColumn"]);
  }
}
2 голосов
/ 13 октября 2010

Попробуйте

if(ds.Tables[0].Rows[0]["IndexPrethodni"] != DBNull.Value)

Вы также можете проверить значение с помощью Convert.IsDBNull ().

1 голос
/ 13 октября 2010

Почему вы не используете обнуляемый тип для проверки значения?

if( ds.Tables[ 0 ].Rows[ 0 ].Field<decimal?>( "IndexPrethodni" ).HasValue )
{
   Convert.ToString( ds.Tables[ 0 ].Rows[ 0 ].Field<decimal>( "IndexPrethodni" ) );
}
1 голос
/ 13 октября 2010

проверка для DBNull

if (ds.Tables [0] .Rows [0]. Field ("IndexPrethodni")! = DBNull.Value) { // преобразовать в строку }

1 голос
/ 13 октября 2010

Вам необходимо проверить значение DBNull, поэтому что-то вроде этого будет работать

object columnValue = ds.Tables[0].Rows[0].Field<decimal>("IndexPrethodni");
if (object != System.DBNull.Value) Convert.ToString(columnValue);
1 голос
/ 13 октября 2010

Чтобы использовать Convert.ToString, вам не нужно проверять нулевое значение, потому что если будет нулевое значение, то оно также не выдаст никакой ошибки и вернет пустое значение.

0 голосов
/ 15 января 2014

Если мы проверяем, является ли десятичное значение нулевым или нет перед преобразованием в другой тип

decimal? d;
if (!d.HasValue)
{
//d is null 
}
...