sbadl
sbadl

Reputation: 1

Why am I getting a "cannot convert from 'HTMLWriter.HeadingElement' to 'HTMLWriter.TextElement[]'" error in Program.cs - C#, Visual Studio

I am getting an "cannot convert from 'HTMLWriter.HeadingElement' to 'HTMLWriter.TextElement[]'" error in my Program.cs class.

namespace HTMLWriter { class Program { static void Main(string[] args) { Converter c = new Converter(@"C:\data\poem.txt", @"C:\data\poem.html"); c.convert();

        c = new Converter(@"C:\data\quotes.txt", @"C:\data\quotes.html");
        c.convert();
    }

    public static void example()
    {
        HTMLDocument doc = new HTMLDocument();
        HeadElement head = new HeadElement();
        head.Title = new TitleElement("This is a title");
        doc.Head = head;
        doc.Body = new BodyElement();
        doc.Body.Add(new HeadingElement("This is a heading")); //error
        doc.Body.Add(new ParagraphElement("This is a paragraph")); //error
        doc.Body.Add(new ParagraphElement(null)); //error
        doc.Body.Add(new ParagraphElement("This is a paragraph too")); //error
        Console.WriteLine(doc.Render());
    }
}

}

namespace HTMLWriter { class BodyElement : HTMLElement { private List _elements = new List();

    public void Add(TextElement[] element)
    {
        for(int i = 0; i < element.Length; i++)
        {
            _elements.Add(element[i]);
        }
    }
    public override string Render()
    {
        if(_elements.Count == 0)
        {
            return "<body>\n </body>";
        }

        for(int i = 0; i < _elements.Count; i++)
        {
            return "<body>" + _elements[i] + "</body>";
        }

        return "<body>\n</body>";
    }
}

}

namespace HTMLWriter { class HeadingElement : TextElement { public HeadingElement(string text) : base(text) { Text = text; } public override string Render() { if(Text == null) { return "

"; }

        return "<h1>" + Text + "</h1>";
    }
}

}

namespace HTMLWriter { class ParagraphElement : TextElement { public ParagraphElement(string text) : base(text) { Text = text; }

    public override string Render()
    {
        if(Text == null)
        {
            return "<p></p>";
        }
        return "<p>" + Text + "</p>";
    }
}

}

namespace HTMLWriter { abstract class TextElement : HTMLElement { private string _text; public string Text { get { return _text; } set { _text = value; } } public TextElement(string text) { Text = text; } } }

Upvotes: 0

Views: 76

Answers (1)

PaulB
PaulB

Reputation: 982

It looks like the Add method takes an array of TextElements.

public void Add(TextElement[] element)

But you are calling the method with only one TextElement;

doc.Body.Add(new HeadingElement("This is a heading"));`

If you want to do both, I would suggest renaming the Add method to AddRange , then add a new Add method as per below;

public void Add(TextElement element)
{
    _elements.Add(element);
}

Upvotes: 1

Related Questions