Как добраться, пространство имен искажают оператор:: работать под C#?

Путаница объясняется тем, что символ обратной косой черты \ используется как побег на двух разных уровнях. Во-первых, интерпретатор Python сам выполняет подстановки для \, прежде чем модуль re когда-нибудь увидит вашу строку. Например, \n преобразуется в символ новой строки, \t преобразуется в символ табуляции и т. Д. Чтобы получить фактический символ \, вы также можете избежать его, поэтому \\ дает один \ ] персонаж. Если символ, следующий за \, не является признанным escape-символом, тогда \ обрабатывается как любой другой символ и проходит через него, но я не рекомендую в зависимости от этого. Вместо этого всегда избегайте ваши символы \, удваивая их, т. Е. \\.

Если вы хотите увидеть, как Python расширяет ваши экраны строк, просто распечатайте строку. Например:

s = 'a\\b\tc'
print s

Если s является частью совокупного типа данных, например. список или кортеж, и если вы напечатаете этот агрегат, Python заключит строку в одинарные кавычки и будет включать экраны \ (в канонической форме), поэтому имейте в виду, как печатается ваша строка. Если вы просто напечатаете в интерпретаторе строку с кавычками, она также отобразит ее в кавычках с экранами '\'.

Как только вы знаете, как кодируется ваша строка, вы можете подумать о том, что re. Например, если вы хотите сбежать \ в строку, которую вы переходите к модулю re, вам необходимо передать \\ в re, что означает, что вам нужно будет использовать \\\\ в вашем цитированном Python строка. Строка Python закончится с \\, а модуль re будет рассматривать это как единственный литерал \.

Альтернативный способ включения символов \ в строках Python - использовать необработанные строки, например r'a\b' эквивалентен "a\\b".

16
задан George Stocker 6 March 2009 в 14:50
поделиться

4 ответа

extern alias alias1;
using alias1::Namespace;
17
ответ дан 30 November 2019 в 21:54
поделиться

Попробуйте это:

extern alias asm1;
extern alias asm2;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            asm1.MyNs.MyClass mc1 = null;
            asm2.MyNs.MyClass mc2 = null;
        }
    }
}

И добавляют global,asm1 к ссылке проекта для assembly1 и global,asm2 для assembly2

4
ответ дан 30 November 2019 в 21:54
поделиться

Я думаю, что необходимо использовать псевдоним экстерна . у Anson Horton есть хороший блог на этой проблеме и как использовать псевдоним экстерна для фиксации ее.

3
ответ дан 30 November 2019 в 21:54
поделиться

При ссылке на некоторый блок в проекте, он имеет "глобальный" псевдоним по умолчанию. Когда Вы добавите другой псевдоним для того блока, например, "глобальный, AssemblyA", Вы сошлетесь на него как это:

using SomeTypeAlias = AssemblyA::Company.Product.SomeType;

или:

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }
-1
ответ дан 30 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

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