Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'namespace used like a type' error

Coders, I am trying to convert a XAML string to HTML using a library I found here , but I have a problem with creating a new instance of the object that would let me use the library. I already added a reference to the library in my Asp.net project and I would like to use it in a WCF file.

The problem is that whenever I try to instantiate a new object with the new keyword, I get an error that says:

'MarkupConverter' is a 'namespace' but is used like a 'type'.

Here is my code, notice that I am creating a new object just like the example shown in the library link above, please help:

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;
        }
    }
}
like image 507
Eyad Avatar asked Nov 21 '10 07:11

Eyad


People also ask

Can namespace and class have same name?

Inside a namespace, no two classes can have the same name.

What is C# namespace?

The namespace keyword is used to declare a scope that contains a set of related objects. You can use a namespace to organize code elements and to create globally unique types.


2 Answers

Confusion is arising because the actual type is MarkupConverter.MarkupConverter, the compiler seems to think your new MarkupConverter is an attempt to use a namespace as a type, rather than an attempt to instantiate a type inside your using namespace.

Simply change your problem line to:

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

..and you should be fine.

like image 178
Carson63000 Avatar answered Sep 21 '22 15:09

Carson63000


In your case, you have a namespace MarkupConverter and a class with the same name (MarkupConverter again).

In the line markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/ the compiler is unable to tell that you intent to use the class. Since a namespace with the same name is present, the compiler picks it instead, because namespaces are linked with higher priority by the compiler.

You can resolve this by using the complete name of the class:

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

An alternative way to providing the fully-qualified name of the class is to use an alias, which takes the form of using {ALIAS} = {Fully qualified name of Type| Namespace}. Note that the {ALIAS} part can be any valid identifier.

The alias you can place either in your usings:

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

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

or after the namespace declaration:

using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    using MarkupConverter = MarkupConverter.MarkupConverter;

    ....

and you're good to go! At this point, if aliases are present, the line

markupConverter = new MarkupConverter()

will correctly pick the MarkupConverter class, because explicit aliasing has higher priority than the automatic binding done by the compiler.

like image 29
Ivaylo Slavov Avatar answered Sep 20 '22 15:09

Ivaylo Slavov