Nano Hash - криптовалюты, майнинг, программирование

Как сделать String.Copy в ядре .net?

При переносе приложения .net framework в приложение .net core в некоторых случаях используется String.Copy для копирования строк. Но похоже, что этот метод удален из ядра .net. , так как бы вы скопировали строку в .net core app, и в результате ее нет и в uwp. Означает ли назначение string b = a; в ядре .net нечто иное, чем в .netframework?

Копия используется в этом коде:

public DataDictionary(DataDictionary src)
        :this()
    {
        this.Messages = src.Messages;
        this.FieldsByName = src.FieldsByName;
        this.FieldsByTag = src.FieldsByTag;
        if (null != src.MajorVersion)
            this.MajorVersion = string.Copy(src.MajorVersion);
        if (null != src.MinorVersion)
            this.MinorVersion = string.Copy(src.MinorVersion);
        if (null != src.Version)
            this.Version = string.Copy(src.Version);
    }
20.01.2017

  • Зачем вам использовать метод Copy? 20.01.2017
  • Нет, в обоих случаях имеется в виду просто эталонная копия. Знаете ли вы, почему приложение использует String.Copy? Требование ti довольно необычно и, как правило, хуже, чем использование = (поскольку оно включает создание копии способом, который почти всегда не нужен). 20.01.2017
  • Связано: Какая польза от System.String.Copy в .NET? 20.01.2017
  • пробовал new String(a)? 20.01.2017
  • @JonSkeet Это определяемый пользователем класс со строковыми членами, и string.Copy использовался в конструкторе копирования. 20.01.2017
  • @SunnyRGupta Конструктор String(string) также отсутствует в ядре .net. :( 20.01.2017
  • Это не объясняет, почему он используется. Вы можете спросить оригинального разработчика? Возможно, они не понимали, что строки в .NET неизменяемы. Если они действительно пытаются убедиться, что у них есть отдельные экземпляры, чтобы они могли заблокировать их или что-то подобное, я бы попытался исправить эту плохую практику... 20.01.2017
  • Возможный дубликат Какая польза от System.String.Copy в . NET? 20.01.2017

Ответы:


1

Присвоение строки — это нечто иное, чем создание копии. a = b просто устанавливает ссылку обеих переменных на один и тот же сегмент памяти. string.Copy фактически копирует строку, и поэтому ссылки больше не совпадают.

Однако я сомневаюсь, что вам нужно string.Copy. Зачем вам еще одна ссылка? Я не могу вспомнить каких-либо распространенных случаев, когда вам это нужно (если вы не используете неуправляемый код). Поскольку строки неизменяемы, вы не можете просто изменить содержимое строки, поэтому копирование в этом случае бесполезно.


Учитывая ваше обновление с кодом, использующим string.Copy, я бы сказал, что использовать string.Copy бесполезно. Простые присваивания подойдут, если вы используете DataDictionary только в управляемом коде.

20.01.2017
  • Обратите внимание, что, в отличие от JavaScript, new String(new char[]{'a'}) == new String(new char[]{'a'}) по-прежнему True. 20.01.2017
  • Думаю, из-за интернирования. Это «проблема», которую string.Copy решает. 20.01.2017
  • Имейте в виду, что строка переопределяет = = так что дело не в интернировании. 20.01.2017
  • Ах, конечно. Хороший вопрос @Damien_The_Unbeliever. (Как побочный вопрос: почему тогда string.Copy не работает?) 20.01.2017
  • Спасибо, в коде некоторые элементы назначены, некоторые скопированы, может быть, я просто назначу их все и посмотрю, не сломается ли какой-нибудь тест. 20.01.2017
  • Правильный ответ, как ответил Кайл Стей ниже: var copiedString = new string(stringToCopy.ToCharArray());. Существуют допустимые экземпляры, в которых вам нужны два разных экземпляра строки с одним и тем же значением. Например, код модульного тестирования, который может манипулировать памятью ссылки на строку. Это редко, но действительно. 05.01.2020

  • 2

    Это не так элегантно, как string.Copy(), но если вам по какой-то причине не нужно ссылочное равенство, рассмотрите возможность использования:

    string copiedString = new string(stringToCopy);
    
    23.04.2017
  • Это был первый результат поиска в Google по запросу string.copy c# .net core. Кроме того, мой ответ предлагает решение для заглавного вопроса «Как сделать String.Copy в ядре .net?». 23.04.2017
  • Сам вопрос не про прямое копирование, а про метод Copy 24.04.2017
  • Итак... Я должен был спросить, а затем ответить на свой вопрос? 30.04.2017
  • В вопросе заложен вопрос, как бы вы скопировали строку в основном приложении .net. Это отвечает на этот вопрос. Ваш отрицательный голос недействителен. 02.05.2017
  • Это отвечает на вопрос, должен быть принятый ответ. 24.10.2019

  • 3

    строка newstring = $"{oldstring}";

    24.01.2019
  • Пожалуйста, рассмотрите возможность объяснения вашего кода и того, как он помогает решить вопрос. 24.01.2019
  • Копирование любого объекта по своей сути является опасным действием. Обычно, когда мне нужна копия строки, мне нужна независимая копия; тот, который, если я каким-то образом изменю его, я не изменю то, что я скопировал. Интерполяция строк выполняет это с наименьшим количеством нажатий клавиш. 22.02.2019
  • Я только что проверил это, и новая строка по-прежнему соответствовала ссылке на объект со старой строкой, однако string b = $"{a} ".Trim(); работала, но не с удаленным пробелом. 09.09.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..