我运行以下程序时收到NullReferenceException.我认为问题来自于我正在创建一个Line包含Point类的事实.
using System;
class Driver
{
static void Main()
{
Point pOne = new Point();
Point pTwo = new Point(2, 1);
Console.Write("Point pOne: ");
PrintPoint(pOne);
Console.Write("Point pthree: ");
PrintPoint(pTwo);
Line lOne = new Line(pOne, pTwo);
Console.WriteLine("Line lOne: ");
PrintLine(lOne);
//Rectangle rOne = new Rectangle();
Rectangle rOne = new Rectangle(lOne);
Console.WriteLine("Rectangle rOne: ");
PrintRectangle(rOne);
Console.ReadLine();
}
// The PrintPoint method
// purpose: display the coordinates of a Point
// Parameters: a Point object
// returns: none
static …Run Code Online (Sandbox Code Playgroud) 我正在玩Pex和Moles,在运行Pex之后发现几乎Pex所说的所有测试都失败了,因为NullReferenceExceptions是"允许的".阅读Pex文档,我发现了以下内容:
如果较高级别的组件将格式错误的数据传递给较低级别组件(较低级别组件拒绝)的较低级别组件,则应首先阻止较高级别组件执行此操作.
所以上面提到的是我们应该在使用类似的东西调用其他方法/类之前测试空值:
if(foo == null)
throw new ArgumentNullException("its null and this shouldn't happen")
else
Bar(foo); //won't get a null reference exception here because we checked first...
Run Code Online (Sandbox Code Playgroud)
恕我直言,检查全部空值对性能和代码臃肿的原因没有多大吸引力,但我想听听其他人不得不说的话......
当我尝试检查某些内容是否为空时,我一直收到空引用错误.我有一个名为User的类,我像这样初始化变量indvUser
User indvUser = api.Users.SearchByExternalId(session.UserInfo.UserId.ToString())
.Users.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
然后我想检查indvUser是否为null
if (indvUser.Equals(null))
{
int a = 1;
}
Run Code Online (Sandbox Code Playgroud)
但是在使用时我得到一个空引用错误Equals(null),我不明白.如果它实际上是null,即没有值,不应该Equals(null)返回true?
我正在尝试使用Automapper QueryableExtensions将基于EF的实体投影到涉及自定义解析器的dto中.它在AutoMapper.PropertyMap.ResolveExpression中使用NRE失败.我已经跟踪了代码,但它失败了,因为PropertyMap类中的CustomExpression为null.
我可以使用下面给出的简单内存集合轻松地重现这一点(虽然我知道Project.To旨在与支持的LINQ提供程序一起使用).
这是示例代码......我错过了一些明显的东西吗?
public class Contract
{
public string ContractNumber { get; set; }
public DateTime SettlementDateTime { get; set; }
}
public class ContractDto
{
public Settlement Settlement { get; set; }
}
public class Settlement
{
public string DeliveryLocation { get; set; }
public DateTime SettlementDateTime { get; set; }
}
public class ContractProfile : Profile
{
protected override void Configure()
{
IMappingExpression map = Mapper.CreateMap();
map.ForAllMembers(opts => opts.Ignore());
map.ForMember(v => v.Settlement, opts => opts.ResolveUsing());
}
} …Run Code Online (Sandbox Code Playgroud) 我想从字符串中调用一个方法,但它不允许我null作为参数传递.该方法不需要参数.
private void reconnect_Click(object sender, EventArgs e)
{
string methodName = "data_load1";
//Get the method information using the method info class
MethodInfo mi = this.GetType().GetMethod(methodName);
//Invoke the method
mi.Invoke(this, null);
}
Run Code Online (Sandbox Code Playgroud)
data_load方法:
private void data_load1()
{
this.dataTableAdapter.Fill(this.myDataSet.data);
}
Run Code Online (Sandbox Code Playgroud)
我收到NullReferenceException was unhandled了mi.Invoke(this, null);.为什么这不让我传递null参数?
我不明白为什么我会收到这个错误,请你帮我找一下我做错了什么?
我想用这个ViewModel实现的是因为我有许多记录使用相同的CartId将其用作父项,并将booking.Item.ItemName用作子项.
你能否告诉我,我试图做的方式是否正确?
控制器:
public ActionResult MyBookings()
{
var myBookingList = SystemDB.Carts.Where(s => s.Booking.Login == strLoginName).OrderByDescending(s => s.RecordId).Take(10);
List<MyBookingsViewModel> result = new List<MyBookingsViewModel>();
foreach (var item in myBookingList)
{
MyBookingsViewModel model = new MyBookingsViewModel();
model.Carts.RecordId = item.RecordId;
model.Carts.CartId = item.CartId;
model.Carts.Booking.Item.ItemName = item.Booking.Item.ItemName;
model.Carts.Booking.UserFullName = item.Booking.UserFullName;
model.Carts.Booking.RequestDate = item.Booking.RequestDate;
model.Carts.StatusCode.StatusCodeName = item.StatusCode.StatusCodeName;
result.Add(model);
}
return View(result);
}
Run Code Online (Sandbox Code Playgroud)
模型:
public class MyBookingsViewModel
{
public Cart Carts { get; set; }
public List<Booking> Bookings { get; set; }
}
public class Cart …Run Code Online (Sandbox Code Playgroud) 基本上我要做的是在客户列表中添加一个客户,在客户列表中有一个属性BillToContact.我想为客户创建一个实例BillToContact.
public class Customer
{
public string ID { get; set; }
public string AccountName { get; set; }
public Contact BillToContact { get; set; }
}
public class BillToContact
{
public string firstname { get; set; }
public string LastName { get; set; }
}
public class Contact
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
//下面是尝试将BillToContact添加到Customer
public void test()
{
List<Customer> Customer = new List<Customer>();
Customer x = new Customer(); …Run Code Online (Sandbox Code Playgroud) 我试图防止 System.NullReferenceException。
我有一个公司,它有一个雇员的集合。每个员工都有一组技能。
SelectedEmployee 指向 Employee 集合中当前选定的元素。
SelectedSkill 指向技能集合中当前选定的元素。
我有一个 ListView,它的 ItemSource 绑定到 Skills 集合;ListView 的 SelectedItem 绑定到 SelectedSkill。
删除技能时,我希望 ListView 滚动到最后一个元素。
private void DeleteSelectedSkillFromSelectedEmployee()
{
Company.SelectedEmployee.Skills.Remove(Company.SelectedEmployee.SelectedSkill);
EmployeeSkillsListView.ScrollIntoView(Company.SelectedEmployee.Skills.Last());
}
Run Code Online (Sandbox Code Playgroud)
如果尚未选择 Employee,则 SelectedEmployee 将为 null。在方法内部执行任何操作时,这将导致 System.NullReferenceException。
注意:我使用了一个扩展方法来替换 .Last() 所以它不会在空集合上出错。
为了解决这个问题,我使用了一个 Util 方法:
public static class Utils
{
public static bool PropertyExists(Object obj, String name)
{
foreach (String part in name.Split('.'))
{
if (obj == null) { return false; }
Type type = obj.GetType();
System.Reflection.PropertyInfo info = type.GetProperty(part);
if (info == null) …Run Code Online (Sandbox Code Playgroud) 我想在我创建的工具栏中添加一个“后退”按钮,因为我删除了默认的按钮,以使某些选项卡具有材料设计效果,但是每次添加代码以使该按钮出现时,Android 都会给出一个异常,说明如下:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.juan.sdfnsdfnskdfnskdfmsfd, PID: 13348
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.support.v4.widget.DrawerLayout.getDrawerLockMode(int)' on a null object reference
at android.support.v7.app.ActionBarDrawerToggle.toggle(ActionBarDrawerToggle.java:284)
at android.support.v7.app.ActionBarDrawerToggle$1.onClick(ActionBarDrawerToggle.java:202)
at android.view.View.performClick(View.java:6308)
at android.view.View$PerformClick.run(View.java:23969)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6823)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1557)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
Run Code Online (Sandbox Code Playgroud)
如果我只在我创建的工具栏中编写相应的代码,我不明白空对象引用意味着什么。
这是toolbar.xml:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/toolbar_morado"
android:id="@+id/toolbar_lista_compras"
android:minHeight="?attr/actionBarSize">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/contador_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lista de compras"
android:textSize="18sp"
android:textColor="#ffffff"/>
</RelativeLayout>
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)
这是我实现工具栏的地方:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud) java android nullreferenceexception android-studio android-toolbar
我遇到了一个我似乎无法修复的错误。在对 Stack Overflow 进行了一些研究之后,似乎空合并运算符可以解决我的问题,但它并没有帮助。这是给出错误的代码:
List<OperationsReviewLevelResult> results = new List<OperationsReviewLevelResult>();
foreach (var approval in OperationsReviewers.ApprovalItems)
{
var result = new OperationsReviewLevelResult();
result.ApproverName = approval.Results.FirstOrDefault().Name ?? "";
result.ReviewLevel = approval.Name;
result.Comment = approval.Results.FirstOrDefault().Comments ?? "";
results.Add(result);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我得到:
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
从行而来result.ApproverName = approval.Results.FirstOrDefault().Name ?? "";。我添加了空合并运算符来检查空值,但这并没有解决我的问题。错误是因为没有Resultsin批准所以我假设FirstOrDefaultlinq方法会返回默认值,当它意识到默认值有一个空值时Name,它会使用空合并运算符返回""右侧的空字符串运营商的。
如果我遗漏了什么,请告诉我,因为我似乎无法理解为什么即使添加空合并运算符也会收到此错误。
编辑:正如评论中所建议的,查看这篇文章帮助我更多地了解我收到此错误的原因。虽然问题有点不同,但我强烈建议阅读答案以全面了解我的问题。