'пространство имен, используемое как ошибка типа

Coders, я пытаюсь преобразовать строку XAML в HTML, используя библиотеку, которую я нашел здесь, но у меня возникла проблема с созданием нового экземпляр объекта, который позволит мне использовать библиотеку. Я уже добавил ссылку на библиотеку в моем проекте Asp.net, и я хотел бы использовать его в файле WCF.

Проблема в том, что всякий раз, когда я пытаюсь создать экземпляр нового объекта с новым ключевым словом, я получаю сообщение об ошибке:

"MarkupConverter" - это "пространство имен", но используется как "тип".

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Web.Services;
using System.Net.Mail;
using System.ServiceModel.Activation;
using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 //: IService1
    {
        private string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
        private IMarkupConverter markupConverter;        

        [OperationContract]
        public string convertXAMLToHTML(string XAMLtext)
        {
            string htmlText = "";
            markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/
            htmlText = markupConverter.ConvertXamlToHtml(XAMLtext);
            return htmlText;
        }
    }
}

Ответы

Ответ 1

Путаница возникает из-за того, что фактический тип MarkupConverter.MarkupConverter, компилятор кажется, что ваш new MarkupConverter является попыткой использовать пространство имен как тип, а не попытку создать экземпляр типа внутри вашего пространства имен using.

Просто измените свою проблемную строку на:

markupConverter = new MarkupConverter.MarkupConverter(); /*SOLUTION HERE!*/

.. и вы должны быть в порядке.

Ответ 2

В вашем случае у вас есть пространство имен MarkupConverter и класс с тем же именем (MarkupConverter снова).

В строке markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/ компилятор не может сказать, что вы намерены использовать класс. Поскольку пространство имен с тем же именем присутствует, компилятор выбирает его вместо этого, потому что пространства имен связаны с более высоким приоритетом компилятором.

Вы можете решить эту проблему, используя полное имя класса:

// supposedly MarkupConverter is the namespace of the MarkupConverter class
markupConverter = new MarkupConverter.MarkupConverter();

Альтернативным способом предоставления полностью квалифицированного имени класса является использование псевдонима, который принимает форму using {ALIAS} = {Fully qualified name of Type| Namespace}. Обратите внимание, что часть {ALIAS} может быть любым допустимым идентификатором.

Псевдоним, который вы можете разместить в своих целях:

using System.Net.Mail;
using System.ServiceModel.Activation;
using System.Data.SqlClient;
using MarkupConverter;

using MarkupConverter = MarkupConverter.MarkupConverter; // this is aliasing

или после объявления пространства имен:

using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    using MarkupConverter = MarkupConverter.MarkupConverter;

    ....

и вам хорошо идти! На данный момент, если присутствуют псевдонимы, линия

markupConverter = new MarkupConverter()

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

Ответ 3

Это почти понятно,

MarkupConverter - это пространство имен, поэтому его нельзя использовать как класс для создания объекта

Ответ 4

Вы можете показать класс MarkupConverter, который вы используете, пожалуйста? Ошибка может быть в ее объявлении. В Где пространство имен? Какова структура вашего файла?

Возможно, вы создали пространство имен MarkupConverter?

Ответ 5

Вы должны добавить инструкцию "Использовать MarkupConverter" в разделе "Использование". Это будет импортировать все классы из этого пространства имен.