将null赋给可空属性C#

时间:2014-12-23 19:02:02

标签: c# properties nullable

我一直在寻找和尝试不同的事情,但我可以完成最基本的事情。

我有一个自定义对象,它有几个可以为空的属性。 问题是,当此属性已有数据时,它不会设置为null。 为简单起见,本文简化了代码。

此方法接受传递的数据以修改数据库中的记录。因此,在我创建订阅对象的行中,我使用参数来知道它是新记录还是我正在修改现有记录。 当我想修改现有的一个时,它会在数据库中查找记录,并返回使用数据库中的数据填充的对象。然后我用新数据覆盖对象属性并再次保存。 它发生的是,如果我想覆盖包含属性FechaAlta的数据的现有记录,并将此日期设置为null,则对象属性FechaData将不会设置为null。 希望它足够清楚。

public string ProcessSubscription(string cRMID, string suscripID, DateTime? fechaAlta = null)
{
  Subscription subscription = null;
  ....
  subscription = new Suscription(modify)
  ....
  subscription.CRMID = cRMID;
  subscription.SuscripID = suscripID;
  subscription.FechaAlta = fechaAlta;
  ....
  return _update.UpdateEntity(subscription);
}

这是调试器在该行之后显示的内容。我试图将其设置为null以用于测试目的 。 Image from the debugger

2 个答案:

答案 0 :(得分:0)

你的问题有点缺乏。但是从我收集的内容中,你想在满足某些条件时将fechaAlta设置为null?如果是这种情况,您的函数甚至不会尝试将fechaAlta设置为null。我只看到你将fechaAlta设置为一个可选参数',这意味着如果在调用ProcessSubscription()时没有指定fechaAlta,那么它只会为null。但是,如果在调用ProcessSubscription()时指定了fechaAlta,则它永远不会为null,因为您没有将其设置为null。

如果你调用它,并且dateTime不为null,它将永远不会为null:

ProcessSubscription("string1","string2", dateTime);

如果您调用它,它将只为null:

ProcessSubscription("string1","string2");

ProcessSubscription("string1","string2", null);

你需要:

subscription.FechaAlta = null;

...或

fechaAlta = null;

...在你的功能中的某个地方。

函数中将逻辑设置为null的逻辑在哪里?

答案 1 :(得分:0)

我发现了问题。这是类属性的set方法中的代码问题。 我只在值!= null时才设置属性。我真傻 谢谢大家。