'名称空间使用类似'错误

Eya*_*yad 15 .net c# compiler-errors

编码器,我试图使用我在这里找到的库将XAML字符串转换为HTML ,但我在创建一个允许我使用该库的对象的新实例时遇到问题.我已经在我的Asp.net项目中添加了对库的引用,我想在WCF文件中使用它.

问题是,每当我尝试使用new关键字实例化一个新对象时,我会收到一条错误消息:

'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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Car*_*000 22

由于实际类型是混淆MarkupConverter.MarkupConverter,编译器似乎认为您new MarkupConverter试图将命名空间用作类型,而不是尝试在using命名空间内实例化类型.

只需将问题行更改为:

markupConverter = new MarkupConverter.MarkupConverter(); /*SOLUTION HERE!*/
Run Code Online (Sandbox Code Playgroud)

..你应该没事.


Iva*_*vov 7

在您的情况下,您有一个名称空间MarkupConverter和一个具有相同名称的类(MarkupConverter再次).

在该行中markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/,编译器无法告诉您打算使用该类.由于存在具有相同名称的名称空间,因此编译器会选择它,因为编译器会将名称空间链接到更高的优先级.

您可以使用类的完整名称来解决此问题:

// supposedly MarkupConverter is the namespace of the MarkupConverter class
markupConverter = new MarkupConverter.MarkupConverter();
Run Code Online (Sandbox Code Playgroud)

提供类的完全限定名称的另一种方法是使用别名,其形式为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
Run Code Online (Sandbox Code Playgroud)

或在命名空间声明之后:

using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    using MarkupConverter = MarkupConverter.MarkupConverter;

    ....
Run Code Online (Sandbox Code Playgroud)

你很高兴去!此时,如果存在别名,则为该行

markupConverter = new MarkupConverter()
Run Code Online (Sandbox Code Playgroud)

将正确选择MarkupConverter类,因为显式别名的优先级高于编译器自动绑定的优先级.