Как получить intellisense в app.config для пользовательского раздела?

Внутренний класс связан с экземпляром внешнего класса и есть два специальных вида: Локальный класс и Анонимный класс . Анонимный класс позволяет нам объявлять и создавать экземпляр класса одновременно, поэтому делает код кратким. Мы используем их, когда нам нужен локальный класс только один раз, поскольку у них нет имени.

Рассмотрим пример из doc , где мы имеем класс Person:

public class Person {

    public enum Sex {
        MALE, FEMALE
    }

    String name;
    LocalDate birthday;
    Sex gender;
    String emailAddress;

    public int getAge() {
        // ...
    }

    public void printPerson() {
        // ...
    }
}

, и у нас есть способ печати элементов, которые соответствуют критериям поиска:

public static void printPersons(
    List roster, CheckPerson tester) {
    for (Person p : roster) {
        if (tester.test(p)) {
            p.printPerson();
        }
    }
}

, где CheckPerson - это интерфейс, такой как:

interface CheckPerson {
    boolean test(Person p);
}

Теперь мы можем использовать анонимный класс, который реализует этот интерфейс, чтобы указать критерии поиска как:

printPersons(
    roster,
    new CheckPerson() {
        public boolean test(Person p) {
            return p.getGender() == Person.Sex.MALE
                && p.getAge() >= 18
                && p.getAge() <= 25;
        }
    }
);

. Здесь интерфейс очень прост, и синтаксис анонимного класса кажется громоздким и непонятным.

В Java 8 введен термин функциональный интерфейс , который является интерфейсом только с одним абстрактным методом, поэтому можно сказать, CheckPerson является функциональным интерфейсом. Мы можем использовать выражение Lambda Expression , которое позволяет нам передать функцию как аргумент метода как:

printPersons(
                roster,
                (Person p) -> p.getGender() == Person.Sex.MALE
                        && p.getAge() >= 18
                        && p.getAge() <= 25
        );

Вместо стандартного функционального интерфейса Predicate мы можем использовать интерфейс CheckPerson, что дополнительно уменьшит требуемый код.

30
задан Community 23 May 2017 в 12:02
поделиться

1 ответ

XML Intellisense не будет автоматически работать на раздел пользовательской конфигурации.

Visual Studio может сообщить о предупреждениях относительно компиляции, жалуясь, что атрибуты раздела пользовательской конфигурации не определяются. Эти предупреждения могут быть проигнорированы.

, Если Вы хотите поддержку IntelliSense XML раздела пользовательской конфигурации (или если Вы просто хотите 'схему, не найденную' предупреждения исчезнуть), добавьте следующую строку к своему файлу DotNetConfig.xsd сразу после первого < xs:schema...> строка (который обычно является второй строкой в файле DotNetConfig.xsd).

<xs:include schemaLocation="YOUR_DIRECTORY\namespace.assemblyname.xsd"/>

файл DotNetConfig.xsd может быть найден в Вашем Visual Studio 8 (или 9) каталог установки в подкаталоге Xml\Schemas.

21
ответ дан Steven A. Lowe 23 May 2017 в 12:02
поделиться
  • 1
    Корректный @Vineet, однако путь, запускающийся с /, не относителен. Моя функция только рассматривает пути, не URIs. – Bergi 15 May 2017 в 19:05
Другие вопросы по тегам:

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