Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Если вы посмотрите на описание для свойства ShortName
в атрибуте Display
, вы увидите, что он имеет довольно ограниченную область из коробки :
[/g9]
Конечно, это не ограничивает вас использованием этого значения в метаданных модели, но нет никаких нативных помощников, которые делают поэтому.
Начиная с MVC 2 , ModelMetadata
предоставляет два метода доступа к базовым данным: FromStringExpression
и FromLambdaExpression
, поэтому вы на самом деле не нужно начинать с нуля при написании собственного метода помощника или расширения.
Если вы ненавидите записываете HTML-вспомогательные методы, вы можете сделать это все inline:
@ModelMetadata.FromLambdaExpression<RegisterModel, string>(
model => model.TransferDate, ViewData).ShortDisplayName} )
Но также вполне можно добавить метод расширения для обеспечения согласованности доступа, дедупликации кода и улучшения обработки ошибок
public static class MvcHtmlHelpers
{
public static MvcHtmlString ShortNameFor<TModel, TValue>(this HtmlHelper<TModel> self,
Expression<Func<TModel, TValue>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
var name = metadata.ShortDisplayName ?? metadata.DisplayName ?? metadata.PropertyName;
return MvcHtmlString.Create(string.Format(@"<span>{0}</span>", name));
}
}
И затем использовать, как и любой другой вспомогательный метод:
@Html.ShortNameFor(model => model.TransferDate)
Дополнительная литература:
[Display(name="")]
и [DisplayName("")]
attributes