Непрекращающаяся зависимость от блока в.NET C#

Поскольку Java не поддерживает перегрузку оператора, == ведет себя одинаково для каждого объекта, но equals () - это метод, который может быть переопределен в Java, а логика для сравнения объектов может быть изменена на основе бизнес-правил.

Основное различие между == и equals в Java заключается в том, что «==» используется для сравнения примитивов, тогда как метод equals () рекомендуется проверять равенство объектов.

Сравнение строк является распространенным сценарием использования оба метода == и equals. Поскольку класс java.lang.String переопределяет метод equals, он возвращает true, если два объекта String содержат одинаковое содержимое, но == будет возвращать true, только если две ссылки указывают на один и тот же объект.

Ниже приведен пример сравнения две строки в Java для равенства с использованием метода == и equals (), которые устранят некоторые сомнения:

public class TEstT{

    public static void main(String[] args) {

String text1 = new String("apple");
String text2 = new String("apple");

//since two strings are different object result should be false
boolean result = text1 == text2;
System.out.println("Comparing two strings with == operator: " + result);

//since strings contains same content , equals() should return true
result = text1.equals(text2);
System.out.println("Comparing two Strings with same content using equals method: " + result);

text2 = text1;
//since both text2 and text1d reference variable are pointing to same object
//"==" should return true
result = (text1 == text2);
System.out.println("Comparing two reference pointing to same String with == operator: " + result);

}
}
8
задан Jeff Atwood 12 August 2008 в 23:30
поделиться

13 ответов

Вероятно переходная ссылка, куда некоторый вызов метода типа возвращается, экземпляр SuperException упаковал ("удрученный") как, например, Исключение, но от осмотра кода в transitively включал код, т.е. код от Ваших внешних вызовов метода, компилятор знает, что необходимо смочь иметь информацию о том типе в какой-то момент.

Resharper сказал бы Вам, где имеет место, что необходимо добавить ссылку, и Вы могли использовать Отражатель иначе RedGate Lütz Roeder для сканирования скомпилированного IL для ссылки на этот тип двумя способами: 1) используйте поисковое средство, 2) откройте каждый открытый тип, который Вы используете и для который, который требует "фантомной" сборки, это попросит, чтобы Вы указали его местоположение.

Это чаще всего happends мне, когда я ссылаюсь на Замок. Виндзор, но не Замок. MicroKernel.:p

3
ответ дан 5 December 2019 в 15:29
поделиться

grep -R SuperException * в основе Вашего проекта (добираются grep от где-нибудь сначала) только, чтобы быть уверенным.

-1
ответ дан 5 December 2019 в 15:29
поделиться

Это - то, где инструменты как Resharper действительно окупаются - простая Находка, Использования обычно говорят мне о таких "фантомных зависимостях" несколько раз.

Возможно, Вы могли перейти к своему определению Суперкласса исключений и попытаться Найти Все Ссылки (). Вы могли бы также хотеть заняться расследованиями, если блок, который SuperException, имеет круговую зависимость от Вашего основного блока (например, основной блок зависит от блока исключения, зависит от основного блока...).

0
ответ дан 5 December 2019 в 15:29
поделиться

При ссылке на какие-либо типы, который наследовался SuperException (даже если тип определил в другом блоке), Вам нужна ссылка на блок, в котором определяется SuperException.

Временно назначенный на этом.

Вы не могли бы ссылаться SuperException, но Вы могли бы ссылаться SpecializedSuperException, который получен из или так или иначе иначе использует SuperException - Ваш grep проекта для SuperException не будет ловить его все же.

Попытка имеет взлом с судом над NDepend

0
ответ дан 5 December 2019 в 15:29
поделиться

grep Ваша папка проекта. Это могла быть скрытая ссылка в Вашем проекте или проекте что Ваши ссылки проекта. Чистите с Блокнотом в случае необходимости.

0
ответ дан 5 December 2019 в 15:29
поделиться

Попытайтесь создать новый проект и добавить все Ваши классы к нему.

0
ответ дан 5 December 2019 в 15:29
поделиться

Это звучит довольно странным. Вот то, что я проверил бы затем:

  1. Проверьте, что нет ничего задерживающегося в Вашем файле Properties/AssemblyInfo.cs.
  2. Проверьте, что нет ничего задерживающегося в Вашем файле SuperUI.csproj.
  3. Удалите все ссылки и повторно добавьте их.
0
ответ дан 5 December 2019 в 15:29
поделиться

Спасибо за Ваши ответы до сих пор. Я попробовал каждое предложение (кроме одного) напрасно.

Предложение, которое я не попробовал, состоит в том, чтобы создать новый проект и добавить весь мой материал к нему, мысль, которая действительно тестирует мое желание жить.;) Я могу попробовать это завтра, если я могу быть побеспокоен. Еще раз спасибо.

1
ответ дан 5 December 2019 в 15:29
поделиться
  1. Выйдите из Visual Studio
  2. Удалите мусорное ведро и obj Папки в Вашем каталоге решения
  3. Перезапустите и посмотрите то, что происходит
2
ответ дан 5 December 2019 в 15:29
поделиться

Я не думаю, что это - проблема кода. Что я вижу, что случай состоит в том, что одна из Ваших существующих ссылок, вероятно, полагается на тот тип в их собственных типах, которые Вы, вероятно, создаете в своем приложении.

Если это так, Вам действительно нужна та ссылка, даже если Вы явно не используете тип и даже при том, что другой блок, на который ссылаются, имеет свою собственную ссылку. Вы иногда получаете ту проблему со сторонними компонентами, которым нужны ссылки на типы, на которые Вы не сослались. Компилятор, очевидно, видит что-то в одном из Ваших существующих блоков, на которые ссылаются, и ожидает Вас к ссылаемому зависимый.

2
ответ дан 5 December 2019 в 15:29
поделиться

Так как это - ошибка компилятора, должна быть ссылка или использование SuperException где-нибудь в проекте.

  1. Сделайте нахождение/заменение во всем проекте или решении для того типа и удалите каждую ссылку (возможно, что Вы уже сделали это).
  2. При ссылке на какие-либо типы, который наследовался SuperException (даже если тип определил в другом блоке), Вам нужна ссылка на блок, в котором определяется SuperException.

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

1
ответ дан 5 December 2019 в 15:29
поделиться

Я соглашаюсь с другими комментариями здесь.. Существует ссылка в простом тексте где-нибудь! У меня были подобные проблемы в прошлом, куда поиск файлов проекта ничего не возвратил, оказывается, что это было в некотором другом файле, который не был автоматически взят в поиске.

Я не думаю, что создание нового проекта является решением здесь.. Необходимо быть положительны, что НИ ОДНА из ссылок в дереве зависимостей не использует SuperException..Ничего

Я никогда не испытывал это до такой степени, когда, я должен был буквально вытереть проект, я всегда находил ссылку где-нибудь. Удостоверьтесь поиск каждого файла.

Править:

Просто точка для добавления, если местоположение, на которое указывает ошибка, кажется случайным, который может часто означать, существует несоответствие между скомпилированным источником и файлом исходного кода.. Действительно ли это - приложение ASP.NET? У меня был он прежде, где скомпилированный DLL не был заменен на восстанавливании в вещах порождения папки временного файла ASP.NET добраться.. Интересный при отладке :)

2
ответ дан 5 December 2019 в 15:29
поделиться

Нет действительно ничего очень таинственного о проектах VS в наше время - это - все текстовые файлы и т.д. ЧТО-ТО должно сослаться на это class/dll, и что что-то должно быть частью Вашего проекта.

Вы имеете действительно grep'd или findstr'd целое дерево решения, каждый файл, для ссылки на то исключение?

1
ответ дан 5 December 2019 в 15:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: