Creating Own Exceptions

.net, c#, error-handling, vb.net

Solution

use something like this:

public class InvalidImageException : Exception
{
    public InvalidImageException() { }
    public InvalidImageException(string message)
        : base(message) { }
    public InvalidImageException(string message, Exception innerException)
        : base(message, innerException) { }
    public InvalidImageException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
        : base(info, context) { }
    public InvalidImageException(string message, MyImage image)
        : base(message) 
    {
        this.Image = image;
    }
    public MyImage Image { get; set; }
}

You should probably not be throwing exceptions while setting the SourcePath property. Possibly either have that logic in the constructor (accept a string, sourcepath into the constructor and throw validations). Either way, the code would look something like this...

public class MyImage
{
    public MyImage(string sourcePath)
    {
        this.SourcePath = sourcePath;
        //This is where you could possibly do the tests. some examples of how you would do them are given below
        //You could move these validations into the SourcePath property, it all depends on the usage of the class
        if(this.height != 32)
            throw new InvalidImageException("Height is not valid", this);
        if(this.Width != 32)
            throw new InvalidImageException("Width is not valid",this);
        //etc etc
    }
    public string SourcePath { get; private set; }
}

Then your code would look like this...

try
{
    imgPath = new MyImage("C:\My Documents\image001.png");
}
catch(InvalidImageException invalidImage)
{
    MsgBox.Show(invalidImage.Message);
}
catch(Exception ex)
{
    //Handle true failures such as file not found, permission denied, invalid format etc
}

Problem

I'd like some advice on building in known errors. Let's say I have a Windows form that needs to set the source path of an image in an object. It must be: - A valid path - An image - A PNG - 32 x 32 in size - No transparency The thing about catching errors is that I'd like the class to handle the errors as much as possible, instead of the Windows form. So let's say I had: ``` Public Class MyImage Public Property SourcePath As String End Class ``` and ``` Sub TestImage() Dim imgPath As New MyImage Try imgPath.SourcePath = "C:\My Documents\image001.png". Catch ex As Exception MsgBox(ex) End Try End Sub ``` `SourcePath` should be a string path that points to a valid image file, that is a png, that is 32x32 and has no transparency. If it is not one or more of those, I just want the `ex` to report back what error(s) are there (like "The image is not 32x32" or "The image contains transparency, which is should not. And it also is not 32x32.). How can I create my own Exceptions for the property `SourcePath` above? On top of this, let's say I had all the same requirements above, but instead of a 32x32 size, I required a 48x48 size for the image on the `SourcePath`. Is there a way to customize for this? Thx in advance

Original source