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

时间:2010-11-21 07:58:14

标签: c# .net compiler-errors

编码器,我正在尝试使用我找到的here库将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;
        }
    }
}

5 个答案:

答案 0 :(得分:22)

由于实际类型为MarkupConverter.MarkupConverter而产生混淆,编译器似乎认为您的new MarkupConverter是尝试将名称空间用作类型,而不是尝试在{{1}内实例化类型{1}}命名空间。

只需将问题行更改为:

using

..你应该没事。

答案 1 :(得分:7)

在您的情况下,您有一个名称空间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类,因为显式别名的优先级高于编译器自动绑定的优先级。

答案 2 :(得分:3)

这非常自我解释,

MarkupConverter是一个名称空间,因此不应该用作创建对象的类

答案 3 :(得分:2)

您能否展示您使用的MarkupConverter课程?错误可能在其声明中。在Where名称空间中它是什么?你的文件结构是什么?

也许您已经创建了MarkupConverter命名空间?

答案 4 :(得分:0)

您应该在usings部分添加“using MarkupConverter”语句。这将从该命名空间导入所有类。