gpt4 book ai didi

c# - 创建自己的异常(exception)

转载 作者:太空狗 更新时间:2023-10-30 00:09:01 25 4
gpt4 key购买 nike

我想要一些关于构建已知错误的建议。假设我有一个 Windows 窗体需要在对象中设置图像的源路径。它必须是:

  • 有效路径
  • 一张图片
  • PNG
  • 尺寸为 32 x 32
  • 没有透明度

关于捕获错误的事情是我希望类尽可能多地处理错误,而不是 Windows 窗体。

假设我有:

Public Class MyImage
Public Property SourcePath As String
End Class

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 应该是指向有效图像文件的字符串路径,即 png,32x32 且没有透明度。如果不是其中一个或多个,我只希望 ex 报告那里有什么错误(比如“图像不是 32x32”或“图像包含透明度,这是不应该。而且它也不是 32x32。)。如何为上面的属性 SourcePath 创建自己的异常?

除此之外,假设我有与上述所有相同的要求,但我要求 SourcePath 上的图像尺寸为 48x48,而不是 32x32。有没有办法对此进行自定义?

提前致谢

最佳答案

使用这样的东西:

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; }
}

在设置 SourcePath 属性时,您可能不应该抛出异常。可能在构造函数中有那个逻辑(接受一个字符串,将源路径放入构造函数并抛出验证)。无论哪种方式,代码看起来都像这样......

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; }
}

然后你的代码看起来像这样......

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
}

关于c# - 创建自己的异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com