Можно ли связать объект dynamic
с объектом пользовательского класса?Динамическое свойство, присвоенное объекту
public class Room
{
public int NumberOfDoors { get; set; }
public int NumberOfWindows { get; set; }
}
затем из другого контекста:
Room room = new Room();
dynamic contact = new ExpandoObject();
contact.NumberOfWalls = 4;
, а затем каким-то образом ассоциировать NumberOfWalls
с room
, как его собственность?
Update (Увеличенное изображение):
согласно @ Навфалу-х внушениям
У меня есть кэшируются List<Room>
итерируемые в представлении бритвы (вне папки темы), призывающий a
частный частичный вид (из текущей темы) для каждого элемента. Одна из тем нуждается в дополнительном
Недвижимость в комнате. У меня только есть доступ к изменению кода в этой конкретной папке темы, частичное
просмотров файлов cshtml (не спрашивайте, почему).
Таким образом, ее в основном:
(psuedocode)
Room.NoOfWalls = SomeHeavyLiftingProcess(Room.NoOfWindows, Room.NoOfDoors)
Ищу обновления путь О, List<Room> rooms
объект с NoOfWalls в
HttpRuntime.Cache["rooms"]
в не звонить SomeHeavyLiftingProcess()
с каждым запросом.
Целью является введение объекта в кешированный объект. Unfortuntely HttpRuntime.Cache["rooms"]
является объект
типа и не позволяет мне сделать это:
HttpRuntime.Cache["rooms"][3]["NoOfWalls"] = SomeHeavyLiftingProcess(..)
Так что я имею в виду, для первого запроса (если кэш пуст или недействителен):
Unpackig: Получить
(List<Room>)HttpRuntime.Cache["room"]
, ввести NoOfWalls в текущий объект комнаты.Переупаковка: обновите
List<Room> room
новым объектом и назначьте его обратноHttpRuntime.Cache
.
Для последующих запросов, значение NoOfWalls будет поступать из кэшированных объекта @Model.NoOfWalls
.
некоторые онлайн примеры показывают, что ' ExpandoObject' используется как совершенно новый вид данных с произвольными членами, добавленными программистом. Это означает, что вы не можете достичь того, чего хотите. –
Спасибо. Есть ли другой способ достижения такого динамического поведения, подобного JavaScript, в C#? – Annie
Почему бы просто не использовать 'ExpandoObject'? Вам не нужна «Комната» (или, если необходимо, вы можете скопировать некоторые свойства из объекта ExpandoObject в объект Room), используя ExpandoObject, вы можете добавить все свойства «NumberOfDoors», «NumberOfWindows» и «NumberOfWalls». –