C# 中的类(带有文件帮助程序)- 可空字符串在其他可空类型不存在时给出错误

发布于 2024-11-15 19:19:41 字数 526 浏览 3 评论 0原文

我有一个类(由 filehelpers 使用),当我尝试定义可为 null 的字符串时,它会给我一个错误:

public String? ItemNum;

错误是:

 Error  1   The type 'string' must be a non-nullable value type in order 
 to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'

即使使用小写 string 也会发生这种情况,尽管我还没有看到那些之间的区别。

使用其他类型,如 int、decimal 等是可以的:

public decimal? ItemNum;

网上一些常见的讨论是通过字段等定义构造函数,但考虑到其他字段工作正常,字符串有什么特别之处?有没有一种优雅的方法来避免它?

I have a class (used by filehelpers) which gives me an error when I try to define a nullable string:

public String? ItemNum;

The error is:

 Error  1   The type 'string' must be a non-nullable value type in order 
 to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'

This occurs even with the lowercase string, though I haven't yet seen a difference between those.

Using another type such as int, decimal etc is fine:

public decimal? ItemNum;

Some general looking on the net talks about defining constructors by field etc, but given the other fields work fine, what's special about string? Is there an elegant way to avoid it?

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

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

发布评论

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

评论(1

蒗幽 2024-11-22 19:19:41

string 是引用类型,引用类型本质上可以为空。

当您定义公共字符串 ItemNum 时,它已经可以为空。

添加了 Nullable 结构,以允许值类型也可以为空。

当你声明公共十进制? ItemNum,相当于public Nullable;项目编号

Nullable struct 有定义:

public struct Nullable<T> where T : struct, new()

where T : struct 表示 T 只能是值类型。

MSDN 中的描述非常详细Nullable Structure

引用:

例如,引用类型如
字符串可以为空,而值
Int32 等类型则不是。一个值
类型不能为空,因为它具有
足够的容量来仅表达
适合该类型的值;它
没有额外的容量
需要表达 null 值。

string is reference type, reference types are nullable in their nature.

When you define public string ItemNum, it is already nullable.

Nullable struct was added to allow make value types nullable too.

When you declare public decimal? ItemNum, it is equivalent to public Nullable<decimal> ItemNum.

Nullable struct has definition:

public struct Nullable<T> where T : struct, new()

where T : struct means that T can be only value type.

Description in MSDN is very detailed Nullable Structure.

Quote:

For example, a reference type such as
String is nullable, whereas a value
type such as Int32 is not. A value
type cannot be nullable because it has
enough capacity to express only the
values appropriate for that type; it
does not have the additional capacity
required to express a value of null.

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