Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅当布尔值为非null时,才在布尔值中指定非null值_C#_Asp.net_.net_Boolean_Non Nullable - Fatal编程技术网

C# 仅当布尔值为非null时,才在布尔值中指定非null值

C# 仅当布尔值为非null时,才在布尔值中指定非null值,c#,asp.net,.net,boolean,non-nullable,C#,Asp.net,.net,Boolean,Non Nullable,我有一个对象,它有一个名为NameIndicator External contract one的布尔字段。在我的代码中,我将布尔值指定为可空 如何检查null并仅在非null时赋值 我目前得到编译时错误,下面的代码很明显,它将可为null的字段分配给不可为null的字段 personDetails.Name= new Name_Format() { NameSpecified = true,

我有一个对象,它有一个名为NameIndicator External contract one的布尔字段。在我的代码中,我将布尔值指定为可空

如何检查null并仅在非null时赋值

我目前得到编译时错误,下面的代码很明显,它将可为null的字段分配给不可为null的字段

 personDetails.Name= new Name_Format()
                    {
                        NameSpecified = true,
                        NameIndicator = contract.IsIndicated
                    };

如果要在null的情况下指定特定的值,而在其他情况下指定该值,则使用null合并运算符

它的语义与

personDetails.Name = new Name_Format()
{
  NameSpecified = true,
  NameIndicator = contract.IsIndicated == null ? true : contract.IsIndicated.Value
};
当然,它只调用一次IsIndicated

如果您希望运行时为您选择一个默认值,那么您可以这样做

personDetails.Name = new Name_Format()
{
  NameSpecified = true,
  NameIndicator = contract.IsIndicated.GetValueOrDefault()
};
在这种情况下,它将选择false,因为这是布尔值的默认值

如果您希望在值为null时什么也不发生,则可以使用If语句:

if (contract.IsIndicated != null)
{
  personDetails.Name = new Name_Format()
  {
    NameSpecified = true,
    NameIndicator = contract.IsIndicated.Value
  }
};

什么意思?如果它是非空的,那么它将始终是非空的。如果它很容易,那么问题是什么?到目前为止,您已经将两个布尔字段描述为不可为空,并且您正在询问如果存在值,如何将一个设置为另一个。不可为空意味着总有一个值。因此,只需像您现在一样分配它。有什么问题吗?你说的是什么错误?澄清问题。这里:在我的代码中,我将my boolean指定为不可为空。这里:NameIndicator不可为null布尔值您是否尝试阅读您自己的问题?如果可为null的值为null,您是否希望指定一个值?在这种情况下,您使用??运算符-空合并运算符。@David:虽然这是完全合法的,但更惯用的编写方式是NameIndicator=contract.IsIndicated??谢谢你,埃里克。关于最后一个块的一个简单问题是,如果它为null,那么NameIndicator值仍将被假定为false?因为如果它是null@Learner:在最后一种情况下,如果值为null,则根本不分配名称,正确。但是您仍然必须使用Value来获取不可为null的值,以使编译器满意。C没有流类型,这是确定IsIndicated在if主体中是否为非null所需的。可为null的结构还有一个HasValue属性,您可以检查它,至少对我来说,它读起来更流畅。@EricLippert:再次感谢您,当然。:感谢您提供的有用见解,从这里获得了很多…:
if (contract.IsIndicated != null)
{
  personDetails.Name = new Name_Format()
  {
    NameSpecified = true,
    NameIndicator = contract.IsIndicated.Value
  }
};