为什么 ?: 运算符不能与 nullable一起使用分配?

发布于 2024-12-26 12:34:06 字数 412 浏览 0 评论 0原文

我正在为我的数据库创建一个对象,我发现了一个奇怪的事情,我不明白:

我有一个对象应该通过 ID 引用“语言”,但这可以为空,所以我的属性是int?(Nullable)

所以首先我尝试使用对象初始值设定项:

myObject = new MyObject() 
{
    myNullableProperty = language == null ? null : language.id;
}

但它不起作用!它告诉我 null 无法转换为 int

但如果我将它放在 if/else 结构中,我可以将 null 放入 var 中,然后将其分配给我的属性。

为什么会有这样的表现?

I'm creating an object for my database and I found a weird thing, which I don't understand:

I've an object which should reference a "language" by an ID, but this can be null, so my property is a int?(Nullable<int>)

so firstly I tried to use the object initializer:

myObject = new MyObject() 
{
    myNullableProperty = language == null ? null : language.id;
}

but it doesn't work! It tell me that null cannot be converted to int

But if I it in a if/else structure, I can put null in a var and then assign it to my properties.

Why is this acting like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

琉璃梦幻 2025-01-02 12:34:06

您可以尝试将 null 转换为 int?,因为 ?: 运算符要求两个操作数返回相同的类型:

myNullableProperty = language == null ? (int?)null : language.id

You may try casting the null to int? as the ?: operator requires both operands to return the same type:

myNullableProperty = language == null ? (int?)null : language.id
梨涡 2025-01-02 12:34:06

这是因为类型不匹配。您必须将 null 值转换为 int 类型。

This is because of a type mismatch. You must cast your null value to the int type.

孤凫 2025-01-02 12:34:06

原因是,当使用 ? 运算符时,: 的左侧和右侧必须来自相同类型,且 typeof(null)!= typeof(int) 所以:

myNullableProperty = language == null ? (int?)null : language.id;

The reason is, when using the ? operator the left and the right side of the : are required to be from the same type and typeof(null)!=typeof(int) so:

myNullableProperty = language == null ? (int?)null : language.id;
春花秋月 2025-01-02 12:34:06

最有可能的是 null 被解释为显然不能分配给 int 的对象。您可能想使用 myNullableProperty = language == null ? (int?)null : language.id;

Most likely null is interpreted as object which obviously can't be assigned to int. You might want to use myNullableProperty = language == null ? (int?)null : language.id;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文