C#如果是else的优先级if if

时间:2017-06-14 14:32:52

标签: c# if-statement

我的项目中有这段特定的代码:

if (type == 1)
{
    if (line.StartsWith(user.PadRight(FieldLengths1[0])))
        keep = true;
}
else if (type == 2)
{
    if (line.StartsWith(user.PadRight(FieldLengths2[0])))
        keep = true;
}

最初,缩进是不同的。 else-if应该链接到" if(type == 1)",正如内容所暗示的那样。但Visual Studio似乎已经改变了我的缩进,建议将它链接到下一个if(if(line.startswith ...))

这可能相当于

if (type == 1)
{
    if (line.StartsWith(user.PadRight(FieldLengths1[0])))
        keep = true;
    else if (type == 2)
    {
        if (line.StartsWith(user.PadRight(FieldLengths2[0])))
            keep = true;
    }
}

或者对此:

 excelExport: function (e) {
                    if (exportFlag) {

                        e.sender.showColumn("INS_TYPE");
                        e.sender.showColumn("ErollementYear");

                        e.preventDefault();
                        exportFlag = true;
                        setTimeout(function () {
                            e.sender.saveAsExcel();
                        });
                    } else {
                        e.sender.hideColumn(0);
                        exportFlag = false;
                    }
                }

Here is complete code for binding

var baseUrl = $('base').attr('href');
var gridReadUrl = baseUrl + 'Insurance/GetInsuranceDisputes';

var exportFlag = true;
$(document).ready(function () {

    InsuranceGrid.Initialize('#ActiveGrid');
    var grid = $("#ActiveGrid").data("kendoGrid");


});

var InsuranceGrid = function () {
    var initialize = function () {

        var grid = $("#ActiveGrid"); //$('div', container);

        var filterOption = {
            extra: false,
            operators: {
                string: {
                    eq: "Is Equal To",
                    startswith: "Starts With",
                    contains: "Contains",
                    endswith: "Ends With"
                }
            }
        };

        var columnOptions = [

               {
                   field: "INS_NO",
                   title: "INS#",
                   width: 100,
                   filterable: true,
                   editable: false,
                   locked: true
               },
             {
                 field: "INS_TYPE",
                 title: "Insurance Type",
                 width: 250,
                 filterable: false,
                 hidden: true
             },
              {
                  field: "ErollementYear",
                  title: "EnrollmentYear",
                  width: 200,
                  filterable: false,
                  editable: false,
                  hidden: true
             },

        ];
 var gridOptions = {
            toolbar: ["excel"],
            excel: {
                fileName: "InsuranceList.xlsx",
                allPages: true,
                filterable: true
            },
            dataSource: {
                error: function (e) {
                    if (e.errors != false) {
                        alert("Error:" + e.errors);
                        grid.one("dataBinding", function (e) {
                            e.preventDefault(); // cancel grid rebind
                        });
                    }
                },
                transport: {
                    read: {
                        url: gridReadUrl,
                        type: "POST",
                        complete: function (jqXHR, textStatus) {
                            //alert('ere');
                        },
                        data: function () {

                            return {};
                        }
                    },
                },
                schema: {
                    data: "data",
                    total: "total",
                    model: {
                        id: "ID",
                        fields: {
                            ID: {
                                editable: false,
                                type: "number"
                            },
                            INS_NO: {
                                editable: false,
                                type: "string"
                            },
                            INS_TYPE: {
                                editable: true,
                                type: "string"
                            },
                            ErollementYear: {
                                editable: true,
                                type: "string"
                            },

                       }

                    }
                },
                serverPaging: true,
                serverSorting: true,
                serverFiltering: true
            }
            , dataBound: dataBoundGrid 
            , columns: columnOptions,

            height: 650,
            sortable: {
                mode: "single",
                allowUnsort: false
            },   
            filterable: true,
            selectable: true,
            change: onChange,

            pageable: {
                pageSize: 20,
                refresh: true,
                messages: {
                    refresh: "Refresh the grid"
                }
            },

            excelExport: function (e) {
                if (exportFlag) {
                    debugger;
                    e.sender.showColumn("INS_TYPE");
                    e.sender.showColumn("ErollementYear");

                    e.preventDefault();
                    exportFlag = true;
                    setTimeout(function () {
                        e.sender.saveAsExcel();
                    });
                } else {
                    e.sender.hideColumn(0);
                    exportFlag = false;
                }
            }

        };
        var onClose = function () {
        };

        grid.kendoGrid(gridOptions).delegate("tbody>tr", "dblclick", function (e) { GotoDetailView(e) });

    };
    var dataBoundGrid = function () {

        var grid = new $("#ActiveGrid").data("kendoGrid");
        var data = grid.dataSource.data();
        $.each(data, function (i, row) {

            var INSType = row.INS_TYPE;
            if (INSType == "CLOSED") {

                $('tr[data-uid="' + row.uid + '"] ').css("background-color", "#990000"); //red
            }
            else {
                $('tr[data-uid="' + row.uid + '"] ').css("background-color", "#ff5c33"); //orange
            }
        });

    };
var refresh = function () {
        var grid = $('#ActiveGrid');
        if (grid.length < 1) {
            return;
        }
        grid.data("kendoGrid").dataSource.read();
    };
    return {
        Initialize: initialize,
        Refresh: refresh,

    };
}();


function GotoDetailView(e) {
    var grid = $("#ActiveGrid").data("kendoGrid");
    window.location = baseUrl + "Details/Index?ID=" + ID;

}

function onChange(e) {

    var model = this.dataItem(this.select());
    ID = model.ID;
}

我想知道else-if如何表现没有括号,以及究竟是什么决定它会链接到哪个?

3 个答案:

答案 0 :(得分:6)

else关键字始终与最近的if

相关联

您应该使用大括号来避免这种混淆。

答案 1 :(得分:4)

§8.7.1中的C# 5.0 Language Specification个州

  

else部分与词汇最接近的前if相关联   这是语法所允许的。

答案 2 :(得分:1)

https://msdn.microsoft.com/en-us/library/aa664812(v=vs.71).aspx上的文档说:

pp-conditional:   pp-if-section   pp-elif-sectionsopt   pp-else-sectionopt   pp-endif

所以,else关键字与最近的if匹配贪婪。