#pragma warning disable,在Razor语法中,但仅适用于catch语句

时间:2013-09-25 09:37:44

标签: c# asp.net-mvc asp.net-mvc-4 razor razorengine

我想禁用我的catch语句的警告,但仅限于catch语句!与.cs文件中的方法相同!

重要! :我不想删除 SystemException e 参数!我的特定需求具体使用 Razor 语法来抑制catch语句的waring。与没有剃刀的.cs文件中的工作方式相同。

初始情况:

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

我明白了:
enter image description here变量'e'已声明但从未使用过

a)如果我将pragma语句放在catch附近,我会收到以下错误:

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

enter image description here错误11只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句_Header.cshtml 72 13

b)如果我在@阻止之前放置了一把剃刀 - <div>,我会收到以下错误:

@<div>error</div>

enter image description here错误5;期待_Header.cshtml 1 1

c)如果我在;块之后放置<div>,似乎没问题,但在加载网站时我遇到编译错误:

@<div>error</div>;

编译错误:

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

2 个答案:

答案 0 :(得分:2)

如果你从不使用catch异常,你可以这样做:

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

虽然我认为在你的捕获中包装pragma只是为了忽略对未使用的变量的警告,坦率地说,这是一个可怕的提议(不仅它看起来很丑陋,但我认为它会降低可读性,并且让事情变得混乱 - 你使用的是变量与否?),如果真的需要这样做,请尝试:

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

答案 1 :(得分:0)

如果您不需要e变量,但仍需要专门捕获SystemException例外,则可以使用:

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

如果您可以使用有效代码来避免警告,则无需使用#pragma来禁止警告。警告是有原因的。