Другим случаем, когда NullReferenceExceptions
может случиться, является (неправильное) использование оператора as
:
class Book {
public string Name { get; set; }
}
class Car { }
Car mycar = new Car();
Book mybook = mycar as Book; // Incompatible conversion --> mybook = null
Console.WriteLine(mybook.Name); // NullReferenceException
Здесь Book
и Car
являются несовместимыми типами; a Car
не может быть преобразован / передан в Book
. Когда этот сбой завершается неудачно, as
возвращает null
. Используя mybook
после этого, вы вызываете NullReferenceException
.
В общем случае вы должны использовать cast или as
, как показано ниже:
Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:
ComicBook cb = (ComicBook)specificBook;
Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as
:
ComicBook cb = specificBook as ComicBook;
if (cb != null) {
// ...
}
var selected=[];
$('#multipleSelect :selected').each(function(){
selected[$(this).val()]=$(this).text();
});
console.log(selected);
Еще один подход к этой проблеме. Выбранный массив будет иметь индексы в качестве значений параметров, и каждый элемент массива будет иметь текст в качестве его значения.
, например
<select id="multipleSelect" multiple="multiple">
<option value="abc">Text 1</option>
<option value="def">Text 2</option>
<option value="ghi">Text 3</option>
</select>
, если говорят, что опции 1 и 2 являются выбранный.
выбранный массив будет:
selected['abc']=1;
selected['def']=2.
Использование функции .val()
в списке с несколькими выборами возвращает массив выбранных значений:
var selectedValues = $('#multipleSelect').val();
и в вашем html:
<select id="multipleSelect" multiple="multiple">
<option value="1">Text 1</option>
<option value="2">Text 2</option>
<option value="3">Text 3</option>
</select>
Просто используйте это
$('#multipleSelect').change(function() {
var selectedValues = $(this).val();
});
Вы также можете использовать функцию js map:
$("#multipleSelect :selected").map(function(i, el) {
return $(el).val();
});
И тогда вы можете получить любое свойство элемента option
:
return $(el).text();
return $(el).data("mydata");
return $(el).prop("disabled");
etc...
Код HTML:
<select id="multiple" multiple="multiple" name="multiple">
<option value=""> -- Select -- </option>
<option value="1">Opt1</option>
<option value="2">Opt2</option>
<option value="3">Opt3</option>
<option value="4">Opt4</option>
<option value="5">Opt5</option>
</select>
Код JQuery:
$('#multiple :selected').each(function(i, sel){
alert( $(sel).val() );
});
Надеюсь, что он работает
Получить выбранные значения в разделителе запятой
var Accessids = "";
$(".multi_select .btn-group>ul>li input:checked").each(function(i,obj)
{
Accessids=Accessids+$(obj).val()+",";
});
Accessids = Accessids.substring(0,Accessids.length - 1);
console.log(Accessids);