Search
Write a publication
Pull to refresh

использование анонимных типов за пределами функции в C# и Javascript

Как известно, в C#, начиная с версии 3.0 появились анонимные типы:
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]);
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.