2013-10-23 148 views
0
var newThing = db.Things.SingleOrDefault(t => t.ThingName == viewModel.ThingName); 

if (newThing == null) 
{ 
    newThing.ThingName.Equals(viewModel.ThingName); 
} 

当上述if语句是真的,我收到一个覆盖空对象

Object reference not set to an instance of an object 

异常,因为newThing为空。是否可以初始化NewThing并将newThing.ThingName设置为viewModel.ThingName?

回答

2

可以初始化它ANS将其值设置

if (newThing == null) 
{ 
    newThing = new Thing(); 
    newThing.ThingName = viewModel.ThingName; 
} 
+1

一个重要的注意的是,这当然不会添加新的东西到DB。从这个问题来看,这还不是很清楚。 – svick

+0

@svick,你是绝对rigth – Satpal

0

是的,你可以,但你需要创建的Thing第一个新的实例。

段:

if (newThing == null) 
{ 
    newThing = new Thing(); 
    newThing.ThingName = viewModel.ThingName; //Set the ThingName to what is wanted. 
} 

希望这有助于。

+1

沙特,你太快我:) – Hexie

0

我想你会感到困惑。

something.Equals(somethingElse); 

回报true or false是否somethingsomethingElse是相等的。

something = somethingElse; 

somethingsomethingElse这就是你想要做的。

此外:

something == somethingElse 

返回true or false是否somethingsomethingElse是相等的。

+2

现在我感到困惑;) – thmshd

2

除了@Satpals解决方案,这里是一个班轮,以从数据库中获得该项目或初始化一个新问题:

var newThing = db.Things.SingleOrDefault 
    (t => t.ThingName == viewModel.ThingName) ?? 
    new Thing { ThingName = viewModel.ThingName };