Как известно, в C#, начиная с версии 3.0 появились анонимные типы:
В C#, начиная с версии 4.0 должна быть возможность в качестве типа возвращаемого значения использовать ключевое слово var. Ну а до четвертой версии для того, чтобы использовать анонимный объект вне функции, в которой он был объявлен, приходится передавать его через тип object:
Проблемма в том, что при таком подходе теряется возможность использовать свойства анонимного объекта «на лету», не указывая его структуры:
Однако, кое-какая функциональность при этом все же сохраняется:
Если в Visual Studio во время отладки поставить точку останова в процедуре Foo после строки
При использовании AJAX мы можем вернуть в javascript переданный анонимный объект, который успешно распознается и преобразуется в javascript объект с нашими свойствами::
C# (server-side):
Javascript (client-side):
var person = new { Name = "John Smith", Age = 30 };
TextBox1.Text = person.Name
В C#, начиная с версии 4.0 должна быть возможность в качестве типа возвращаемого значения использовать ключевое слово var. Ну а до четвертой версии для того, чтобы использовать анонимный объект вне функции, в которой он был объявлен, приходится передавать его через тип object:
object GetPerson()
{
return new new { Name = "John Smith", Age = 30 };
}
void Foo()
{
var a = GetPerson();
}
Проблемма в том, что при таком подходе теряется возможность использовать свойства анонимного объекта «на лету», не указывая его структуры:
void Foo()
{
var a = GetPerson();
var name = a.Name; // Error
}
Однако, кое-какая функциональность при этом все же сохраняется:
Обзор свойств переданного анонимного объекта при отладке
Если в Visual Studio во время отладки поставить точку останова в процедуре Foo после строки
var a = GetPerson();
, то мы с помощью Quick Watch (Ctrl+Alt+Q) или других окон просмотра переменных (Locals, Watch List) можем «раскрыть» (expand) нашу анонимную переменную и просмотреть все её значения.Использование переданного анонимного объекта в javascript
При использовании AJAX мы можем вернуть в javascript переданный анонимный объект, который успешно распознается и преобразуется в javascript объект с нашими свойствами::
C# (server-side):
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
}
object GetPerson()
{
return new new { Name = "John Smith", Age = 30 };
}
[AjaxPro.AjaxMethod()]
public object Foo()
{
return GetPerson();
}
}
}
Javascript (client-side):
var person = WebApplication1._Default.Foo();
console.debug("Person name: " + person.name);
console.debug("All person properties:");
for (var prop in person)
console.debug(prop + " = " + person[prop]);