C# ?? 和布尔的三元运算?Guid呢?类型

C# ?? 和布尔的三元运算?Guid呢?类型,c#,C#,我试图检查对象的状态,如果它为null,那么我需要返回null,否则,我需要返回Guid或Bool Portrait_Enabled = _SiteImagesModel_ImagesViewModel == null ? null : _SiteImagesModel_ImagesViewModel.Enabled, Portrait_PrimaryImage = _SiteImagesModel_ImagesViewModel.PrimaryImage ?? null, Portrait_R

我试图检查对象的状态,如果它为null,那么我需要返回null,否则,我需要返回
Guid
Bool

Portrait_Enabled = _SiteImagesModel_ImagesViewModel == null ? null : _SiteImagesModel_ImagesViewModel.Enabled,
Portrait_PrimaryImage = _SiteImagesModel_ImagesViewModel.PrimaryImage ?? null,
Portrait_RecordID = _SiteImagesModel_ImagesViewModel.RecordID ?? null,
Portrait_RelatedImage = _SiteImagesModel_ImagesViewModel.RelatedImage ?? null,
我试过
?:,我得到一个编译器错误,说明:

  • 无法确定条件表达式的类型,因为在
    bool
  • 运算符
    不能应用于类型为
    bool
  • 运算符
    不能应用于类型为
    Guid
Guid
Bool
值都是
Nullable

关于空合并运算符(注意强调部分):

可为空的类型可以表示来自该类型的域或 值可以是未定义的(在这种情况下,值为null)。你可以用 这个运算符对的语法表达能力返回适当的 值(右侧操作数),当左侧操作数具有可空值时 值为null的类型。如果尝试分配一个可为null的值类型 不使用??接线员,你会的 生成编译时错误。如果使用强制转换,则 值类型当前未定义,为InvalidOperationException 将引发异常

由于右侧操作数必须返回相应数据类型的适当值,因此不能直接将其设置为null,即使指定的变量具有可为null的数据类型(两个操作数必须具有相同的数据类型)

基本上,当您将空合并运算符定义为:

Portrait_PrimaryImage = _SiteImagesModel_ImagesViewModel.PrimaryImage ?? [DefaultValueIfNull];
将其翻译为:

Portrait_PrimaryImage = _SiteImagesModel_ImagesViewModel.PrimaryImage == null ? [DefaultValueIfNull] : _SiteImagesModel_ImagesViewModel.PrimaryImage;
由于三值运算符和null合并运算符中的两个操作数必须具有相同的类型,如果仍希望传递null值,可以将右侧操作数强制转换为正确的类型,如下所示:

Portrait_PrimaryImage = _SiteImagesModel_ImagesViewModel.PrimaryImage ?? (bool?)null;

Portrait_RecordID = _SiteImagesModel_ImagesViewModel.RecordID ?? (Guid?)null;

Portrait_RelatedImage = _SiteImagesModel_ImagesViewModel.RelatedImage ?? (bool?)null;
请注意,
null
Nullable
的类型不同,您需要强制转换到
bool?
以获得相同的数据类型

与您的情况一样,三元运算符的用法刚刚足够,当第二个操作数为
null
时,无需使用null合并运算符:

Portrait_Enabled = _SiteImagesModel_ImagesViewModel == null ? null : (bool?)_SiteImagesModel_ImagesViewModel.Enabled;

Portrait_RecordID = _SiteImagesModel_ImagesViewModel == null ? null : (Guid?)_SiteImagesModel_ImagesViewModel.RecordID;

Portrait_RelatedImage = _SiteImagesModel_ImagesViewModel == null ? null : (bool?)_SiteImagesModel_ImagesViewModel.RelatedImage;
参考资料:


您分配给的变量和对象的类型是什么?
\u sitemagesmodel\u ImagesViewModel
?…哪些行给出了实际的错误,因为您的错误非常清楚,可能只是一个小错误
??空值
是没有意义的。
??
运算符的目的是在左操作数为空时提供一个不同的值。“如果值为null,则使用null”是多余的,它在功能上等同于
myBool==true
。您已经在异常内容中解释了所有内容<代码>纵向\已启用=\站点图像模型\图像视图模型==空?null:_SiteImagesModel_ImagesViewModel.Enabled
应该是
trait_Enabled=_SiteImagesModel_ImagesViewModel==null?null:(bool?)\u SiteImagesModel\u ImagesViewModel.Enabled
还请显示更大的图片-这是使用对象初始值设定项初始化方法的一部分-请显示它