Hi Keith,
First, you should check if resultBuffer is null (the LISP function was called with non arguments) before doing resultBuffer.AsArray() because if resultBuffer is null it may crash AutoCAD.
[...]
if (resultBuffer == null )
{
throw new TooFewArgsException
(); }
TypedValue[] arguments = resultBuffer.AsArray();
if (arguments.Length < 2)
{
throw new TooFewArgsException
(); }
[...]
To reply your question, as both Autodesk.AutoCAD.Runtime.Exception and LispException inherits from System.Exception, catching system exception will catch all.
By my side I use different catches if I want the user knows where and why was thrown the exception: LispException is due to an error in the calling LISP function (mainly arguments), AutoCAD exception is due to an exception related to the execution in autoCAD and system.Exception for all others ones.
About the return value, returning a boolean (T or nil in LISP) may be a good idea if LabelCurveStyleCloningHelper.ImportStyle() method retuns a boolean too, and may return false.
For me, the issue is the function will return nil (false) as well if LabelCurveStyleCloningHelper.ImportStyle() returns false or if an exception is thrown, and the user may not see the message (which displays in the command line but not in the Visual LISP console).
This is why, in case of an exception, I'd rather display an alert box and rethrow the exception so that the LISP execution stops, as it seems there's no way to reproduce the LISP error behavior from .NET (see
here).
catch (LispException exception)
{
Application.ShowAlertDialog(string.Format("LISP error: {0}\n", exception.Message));
throw;
}