2012-02-23 3 views
0

Я создал функцию, которая возвращает значение в соответствии с указанным типом.Как реализовать функцию типа

Код:

private T FindCellValue<T>(GridViewRow grdRow, string cntName) 
     { 
      var currColType = grdRow.FindControl(cntName); 
      object val = currColType; 
      if (currColType is HiddenField) 
      { 
       val = ((HiddenField)currColType).Value; 
      } 
      if (currColType is TextBox) 
      { 
       val = ((TextBox)currColType).Text; 
      } 
      if (currColType is HtmlInputText) 
      { 
       val = ((HtmlInputText)currColType).Value; 
      } 
      if (currColType is DropDownList) 
      { 
       var selectedItem = ((DropDownList)currColType).SelectedItem; 
       val = new string[] { selectedItem.Text, selectedItem.Value }; 
      } 
      if (currColType is RadDateTimePicker) 
      { 
       val = ((RadDateTimePicker)currColType).SelectedDate; 
      } 

      if (!(val is Control || val is WebControl || val is HtmlInputControl) && string.IsNullOrEmpty(Convert.ToString(val))) 
      { 
       return default(T); 
      } 
      return (T)val; 
     } 

Этот код не много времени, а типажей. Как я могу эффективно реализовать его?

ответ

1

Если T не соответствует значению управления, Какая обработка ошибок вам нужна? Возвращает значение по умолчанию (T) или исключает исключение?

По крайней мере проверить

if (currColType is DropDownList) 
{ 
    if (typeof(T) != typeof(string[])) 
     return default(T); //or throw exception 
} 

if (currColType is RadDateTimePicker) 
{ 
    if (typeof(T) != typeof(DateTime)) 
     return default(T); //or throw exception 
} 
1

Универсальных типов используются для повторного использования кода и избежать затрат произнесения во время выполнения, но в вашем случае это не тот случай. поэтому в этом контексте можно использовать простую функцию, которая возвращает объект. Тогда вы можете в своем вызывающем функциональном типе применить его к вашему желаемому типу.

Для обработки ошибок: Если вы наберете отдать свой объект как (тип) объекта, если приведение типов не успешным он будет возвращать InvalidCastException, так что вы можете проверить то же самое.

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

Смежные вопросы