Добро пожаловать в Записки дилетанта Войти|Регистрация | Помощь
Кто сказал, что var нельзя возвращать из методов в C# 3?

Маленький хак для тех, кто переживает по поводу невозможности возврата переменных типа var из методов в C# 3. Действует безотказно, хотя и имеет смысл применять его только при биндинге или в безвыходных ситуациях Wink

Итак имеем какой-то DAL/BLL метод, возвращающий набор данных, который мы потом используем в биндинге. Берем Linq в руки и пишем

public var GetData() {
  return from t in db.Table1 select new {t.Field1, t.FIeld2};
}

и естесственно получаем при компиляции ашипку. Но мы то биндинг делаем, а там есть всякие Eval-ы, которым на момент компиляции и не нужна информация о том, что там в классе и как. Поэтому легким движением руки меняем объявление public var GetData() на public object GetData() и, о чудо, присвоив DataSource-у какого-нить биндинг контрола результат вызова этого метода все у нас чудесно начинает работать.

Но и это еще не все. А что делать, скажем, если нужно работать с данными внутри ItemDataBound/RowDataBound событий соотв. контролов? Как тогда поступать? И тут у нас есть чем помочь, стоит только вспомнить о существованиии класса DataBinder и его волшебного метода Eval() Wink И можно написать примерно такую конструкцию:

protected override void listDataBound( object sender, System.Web.UI.WebControls. RepeaterItemEventArgs e)
{
  if (e.Item.DataItem != null )
   
(e.Item.FindControl( "litField1" ) as Literal ).Text = DataBinder .Eval(e.Item.DataItem, "Field1" ).ToString();
}

protected override void listDataBound( object sender, System.Web.UI.WebControls. RepeaterItemEventArgs e)
{
  if (e.Item.DataItem != null )
   
(e.Item.FindControl( "litField1" ) as Literal ).Text = DataBinder .Eval(e.Item.DataItem, "Field1" ).ToString();
}

И, наконец, для полного изврата напишу ка я еще вот такую конструкцию:

string a = "" ;
foreach ( object o in GetData() as IEnumerable )
  a +=
DataBinder .Eval(o, "Field1" ).ToString();

string a = "" ;
foreach ( object o in GetData() as IEnumerable )
  a +=
DataBinder .Eval(o, "Field1" ).ToString();

.NET 1 в связке с C# 3 дает чудесные результаты Big Smile

Posted: Tuesday, January 29, 2008 4:16 PM от Дмитрий Руденко
Метки (ключевые слова): ,

Комментарии:

Нет Комментариев

Новые Комментарии отключены.