什么时候在API中抛出异常?

Aca*_*uza 2 .net c# exception

我正在为我的宠物软件构建API,我遇到以下情况:

使用其他服务的服务.我有一个服务使用另一个服务加载程序集,我应该在加载程序集的服务或使用该服务的服务上抛出异常?

AssemblyService:

    public class AssemblyService : IAssemblyService
    {
        public Assembly Load(string assemblyName)
        {
            Assembly assembly;

            try
            {
                assembly = Assembly.Load(assemblyName);
            }
            catch
            {
                assembly = null;
            }

            return assembly;
        }

        ...

    }
Run Code Online (Sandbox Code Playgroud)

使用AssemblyService的服务:

    public class CommandService : ICommandService
    {
        private readonly IAssemblyService assemblyService;

        public CommandService(IAssemblyService assemblyService)
        {
            this.assemblyService = assemblyService;
        }

        public CommandOutput Process(string inputCommand, string requestInfo)
        {
            string commandName = GetAssemblyName(inputCommand);
            string args = GetArgs(inputCommand);

            Assembly assembly = assemblyService.Load(commandName);

            if (assembly == null) throw new UnknownCommandException(commandName);

            ICommand command = assemblyService.GetCommand(assembly);

            return command.Execute(args, requestInfo);
        }

        #region Private methods
        ...
        #endregion
    }
Run Code Online (Sandbox Code Playgroud)

我应该像上面的例子一样在AssemblyService或CommandService中抛出异常吗?

我想学习如何处理一个例外,在上面的例子中的线assembly = Assembly.Load(assemblyName);可以抛出ArgumentNullException,ArgumentException,FileNotFoundException,FileLoadExceptionBadImageFormatException.我应该处理所有这些例外吗?

UnknownCommandException(commandName) is a custom exception.
Run Code Online (Sandbox Code Playgroud)

其他问题:任何使用我的API的人都知道方法什么时候会抛出异常?我看到将鼠标放在.Net Framework的任何方法上,您将看到该方法是否会引发异常.这适用于我的API方法吗?

500*_*ror 5

你的标题是关于抛出异常但你实际上似乎在谈论捕获异常.您通常不应该捕获异常,除非您可以做一些有意义的事情来纠正导致首先抛出异常的条件,在这种情况下,您应该只捕获可以处理的显式异常类型.