Используйте следующий код для копирования значений:
c := make([]*T, len(s))
for i, p := range s {
if p == nil {
// Skip to next for nil source pointer
continue
}
// Create shallow copy of source element
v := *p
// Assign address of copy to destination.
c[i] = &v
}
Запустите его на детской площадке .
Этот код создает поверхностную копию значения. В зависимости от требований приложения может потребоваться глубокое копирование значения или, если это тип структуры, одного или нескольких полей. Особенности зависят от фактического типа T и требований к применению.
У Rick Strahl есть хорошая статья о Ваших опциях: http://www.west-wind.com/weblog/posts/246222.aspx .
См. также: LINQ к SQL - где Ваш DataContext живет? .
можно хотеть немного отличающуюся стратегию каждого типа развертывания - сеть, рабочий стол, сервис окон...
Итоговый, Ваши опции:
я выбрал DataContext на объект данных. Это не может быть самое необычное решение, но это работает во всех средах развертывания.
Класс DataContext достаточно легок, что можно инстанцировать его много раз. Это делает вещь более простой при доступе к объектам объекта в отдельном методе. Если необходимо получить доступ к тем же объектам LINQ от различных классов и методов при сохранении их присоединенными к DataContext для отслеживания целей, это должно также хорошо сохранить единственный экземпляр.
Я использую новый экземпляр DataContext для каждой транзакции.
Снова использующие старые экземпляры могут быть неприятными, и чрезмерно увеличат размер содержания DataContext, так как любой объект, который был загружен в некоторое время, должен будет быть прослежен - Ваше приложение станет медленнее и медленнее, чрезмерно увеличивая размер памяти.
при необходимости в объекте дольше, чем для транзакции Вы можете отсоединить его от DataContext путем клонирования объекта и можете повторно прикрепить его позже к новому и новому DataContext с помощью Присоединения ().
я даже могу клонировать объект, отправить его по сети с WCF, вернуть его в некотором более позднем вызове, присоединить его к новому DataContext и сохранить изменения (конечно, мне нужен столбец метки времени для этого).
Проблема с использованием единственного объекта контекста данных состоит в том, что можно войти в проблему, если Вы добавили некоторые изменения в, он - очередь, и хотят сделать откат всего на приблизительно из тех изменений с очередями.
Вот почему я использую объект контекста данных для каждого из моих классов - мой User
, класс имеет свой собственный контекст данных, мой Application
, класс имеет свой собственный и т.д.
Этот шаблон устраняет большинство проблем сделать откаты в моих проектах.
Я всегда слышал, что необходимо использовать единственный экземпляр DataContext. Я обычно создаю одноэлементный экземпляр своего DC в моем классе бизнес-логики и использую его для всех моих запросов linq.
я уверен, что некоторые linq гуру на здесь смогли приводить Вам точные причины относительно того, почему Вы должны только иметь на экземпляре Вашего класса контекста данных... Я не совсем уверен.