Question

I want to disable the warning of my catch statement, but only of the catch statement! The same way as in the .cs file!

Important! : I do not want to remove the SystemException e argument! My specific demand is to specifically suppress the waring of the catch statement with the Razor syntax. Same way as it works in a .cs file without razor.

Initial situation:

<div>
    @{
        try
        {
            //some code
            <div>yes</div>
        }
        catch (SystemException e)
        {
            <div>error</div>
        }
    }
</div>

I get:
enter image description here The variable 'e' is declared but never used

a) If I put the pragma statements around the catch, I get following error:

#pragma warning disable 0168
catch (SystemException e)
#pragma warning restore 0168

enter image description here Error 11 Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement _Header.cshtml 72 13

b) If I put a Razor-@ before the <div> block, I get following error:

@<div>error</div>

enter image description here Error 5 ; expected _Header.cshtml 1 1

c) If I put a ; after the <div> block, it seems OK, but when loading the site I get following compilation error:

@<div>error</div>;

Compilation error:

Line 379:            #line default
Line 380:            #line hidden
Line 381:item => new System.Web.WebPages.HelperResult(__razor_template_writer => {
Line 382:
Line 383:BeginContext(__razor_template_writer, "~/Views/Shared/_Header.cshtml", 1947, 16, true);
Was it helpful?

Solution

If you are never using the catch exception, you could just do this:

<div>
@{
    try
    {
        //some code
        <div>yes</div>
    }
    catch
    {
        <div>error</div>
    }
}
</div>

Whilst I think wrapping pragmas around your catch simply to ignore a warning about an unused variable is, frankly, a hideous proposal (not only does it look ugly, but I think it reduces readability, and confuses matters - are you using the variable or not?), if you really need to do that, try this:

<div>
@{
    try
    {
        //some code
        throw new SystemException();
        <div>yes</div>
    }

    catch 
    (
    #pragma warning disable 0168
        SystemException e
    #pragma warning restore 0168
    )
    {
        <div>error</div>
    }
}
</div>

OTHER TIPS

If you don't need the e variable, but still need to specifically catch SystemException exceptions, you can just use:

<div>
    @try
    {
        // Some code here.
    }
    catch (SystemException)
    {
        <div>
            A system error occurred.
        </div>
    }
</div>

There's no need to use #pragma to suppress the warning if you can avoid it with valid code. Warnings are there for a reason.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top