C#6方法的空条件运算符失败

时间:2016-02-25 19:14:29

标签: c# c#-6.0 null-propagation-operator

以下(C#Interactive)编译但会爆炸。不确定我错过了什么......

var countries = [];
var per_page = 10;
function generate_pagination(per_page) {
    var pagination_links = countries.length / per_page;
    var pagination_length = Math.ceil(pagination_links);
    $('#pagination').html('');
    for (var i = 1; i <= pagination_length; i++) {
        $('#pagination').append('<a href="#" class="page">' + i + '</a>');
    }
}

function display_countries(start, end) {

    $('.new').html('');
    for (var i = 0; i < countries.length; i++) {

        if (i >= start && i < end) {
            $('.new').append('<tr><td>' + (i + 1) + ": " + countries[i] + '</td><td>Action</td></tr>');
        }
    }
}

$(document).ready(function () {
    $("#displayvalues").change(function () {
        per_page = $(this).find("option:selected").val()
        var end = 1 * per_page;
        var start = 0;
        display_countries(start, end);
        generate_pagination(per_page);
    })

    $('body').on('click', '.page', function () {
        var page_no = $(this).html();
        var end = page_no * per_page;
        var start = end - per_page;
        display_countries(start, end);
        return false;
    })

    $.ajax({
        url: './countries.php',
        type: 'GET',
        data: { countries: true },
        cache: false,
        async: true,
        dataType: 'json',
        success: function (data) {
            countries = data.countries;
            generate_pagination(per_page);
            display_countries(0, per_page);
        }
    });
});

2 个答案:

答案 0 :(得分:8)

当然可以!

根据您的代码,t不是null,因此?.是多余的。

t.GetSomething并非如此。那是什么引发了NullReferenceException

您正在寻找的是:

var result = t.GetSomething?.Invoke();

要了解如何实施新的C#6功能,请查看my article

答案 1 :(得分:3)

我认为你误解了这个算子的运作方式。

var result = t?.GetSomething();

此处t?.表示&#34;如果t为空,请在此处停止并返回null;否则,取消引用t并检索成员GetSomething

现在,您没有查看GetSomething上的任何内容。相反,你可以这样做:

var result = t?.GetSomething?.Invoke();