'пространство имен, используемое как ошибка типа
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" в разделе "Использование". Это будет импортировать все классы из этого пространства имен.