В общем, это происходит, когда вы предоставляете строковый литерал, когда angular ожидает выражения или функции . «#» В строке вызывает ошибку $parse:lexerr
.
В моем случае я устанавливал строковый литерал для пользовательского атрибута директивы, когда мне следовало использовать выражение.
Неправильно :
<my-directive my-attr="/foo#bar"></my-directive>
Исправлено :
<my-directive my-attr="'/foo#bar'"></my-directive>
В этом примере атрибут my-attr
был установить для двусторонней привязки (=) в пользовательском my-directive
. Если бы он был установлен в «@», ошибка бы не произошла.
scope: {
my-attr: "="
}
Вы можете:
typeof(Foo)
.GetField("bar",BindingFlags.Instance|BindingFlags.NonPublic)
.SetValue(foo,567);
Ответ положительный, но что более важно:
Зачем вам это нужно? Намеренное нарушение инкапсуляции кажется мне ужасно плохой идеей.
Использование отражения для изменения поля, предназначенного только для чтения или постоянного, похоже на объединение Закона непредвиденных последствий с Законом Мерфи .
]Очевидно, стоит попробовать:
using System;
using System.Reflection;
public class Test
{
private readonly string foo = "Foo";
public static void Main()
{
Test test = new Test();
FieldInfo field = typeof(Test).GetField
("foo", BindingFlags.Instance | BindingFlags.NonPublic);
field.SetValue(test, "Hello");
Console.WriteLine(test.foo);
}
}
Это отлично работает. (Интересно, что в Java действуют другие правила - вы должны явно сделать доступным поле
, и оно в любом случае будет работать только для полей экземпляра.)
Похоже, вы спрашиваете, стоит ли в вашей ситуации отдавать предпочтение наследству или составу. Я бы сказал, что вы не создаете новую реализацию List
и вас не волнует, как List
реализуется, поэтому наследование не подходит для вашей проблемы. Вместо этого предоставляется функция пейджинга. Я бы создал класс, который обобщенно упаковывает (инкапсулирует) логику подкачки с помощью List
или какой-либо другой общей коллекции.
Ваш код работает с календарем Google по умолчанию для указанного имени пользователя и пароля. (IE использует календарь по умолчанию для username@gmail.com) Это видно, так как URI указывает на «/feed/default/private ». Если вы хотите опубликовать событие в другом календаре, имя пользователя должно быть авторизовано для публикации в этом календаре, и вам нужно отправить в ЭТО календари private uri.
ПРАВКА: По умолчанию этот частный URL-адрес имеет формат « http://www.google.com/calendar/feeds/CALENDAR_ID/private/full »
Для поиска идентификатора календаря используется следующий адрес календаря на странице параметров настройки календаря в Google Calendars. Он будет выглядеть так:
«* * * * * * * * * * * * * * * * * * * * * * * * * * @ group.calendar.google.com»
Окончательный URL-адрес:
EDIT: « http://www.google.com/calendar/feeds/ * * * * * * * * * * * * * * * * * * * * * * @ group.calendar.google.com/private/full»
Это произойдет в вашем Uri postUri = new Uri ();
EDIT:
Ты на самом деле не должен этого делать. Я проверил, что могу успешно отправить сообщение во вторичный календарь, удалив закрытый ключ.
-121--4950656-Вы спросили, почему вы хотите разорвать такую инкапсуляцию.
Я использую класс помощника объекта для гидратации объектов. При этом используется отражение для получения всех свойств новой пустой сущности, а имя свойства/поля сопоставляется со столбцом в результирующем наборе и задается с помощью метода propertyinfo.setvalue ().
Я не хочу, чтобы кто-либо еще мог изменить значение, но я также не хочу прилагать все усилия к пользовательским методам гидратации кода для каждой сущности.
Многие из моих сохраненных процессов возвращают результаты, которые не соответствуют непосредственно таблицам или представлениям, поэтому кодовые ORM ничего не делают для меня.