Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# 如何使C类的对象属性成为可选的?_C#_.net_Nullable_Non Nullable - Fatal编程技术网

C# 如何使C类的对象属性成为可选的?

C# 如何使C类的对象属性成为可选的?,c#,.net,nullable,non-nullable,C#,.net,Nullable,Non Nullable,我正在尝试用C创建一个模型类,其中我需要对象/列表属性作为可选属性: public class Customer { [JsonProperty("Custid")] public string CustId { get; set; } [JsonProperty("CustName")] public string CustName { get; set; } } 上述代码给出的错误如下:- 错误1:类型“object”必须是不

我正在尝试用C创建一个模型类,其中我需要对象/列表属性作为可选属性:

public class Customer
{
        [JsonProperty("Custid")]
        public string CustId { get; set; }
        [JsonProperty("CustName")]
        public string CustName { get; set; }
}
上述代码给出的错误如下:- 错误1:类型“object”必须是不可为Null的值类型,才能将其用作泛型类型或方法“nullable”中的参数“T” 错误2:类型“List”必须是不可为null的值类型,才能将其用作泛型类型或方法“nullable”中的参数“T”

请向我解释上述场景,并为我提供替代解决方案。

字符串、列表和对象都是引用类型。默认情况下,这些值可为空。可为空的类型,例如int?是Nullable的缩写,仅用于值类型

在C 8.0中,引入了一个新特性,允许不可为null的引用类型,即显式不允许null赋值的引用类型。这是一个选择加入功能-您可以启用它,以便更清楚地显示有关引用的意图。如果使用此选项,则用于定义可空引用类型的语法与可空值类型的语法相同:

string nonNullableString = null; // Error
string? nullableString = null;   // Ok
请记住,启用不可为空的引用类型意味着所有的引用类型后面都不跟?将不可为空;这可能需要您在应用程序中进行大量更改

所以你有两个选择。要么启用不可为null的引用类型,然后需要显式标记要为null的类型,要么坚持使用可为null的引用类型,只使用string而不是string?为了同样的结果。我鼓励在默认情况下使用不可为空的类型,因为它有助于避免一整类非常常见的编程错误。

字符串、列表和对象都是引用类型。默认情况下,这些值可为空。可为空的类型,例如int?是Nullable的缩写,仅用于值类型

在C 8.0中,引入了一个新特性,允许不可为null的引用类型,即显式不允许null赋值的引用类型。这是一个选择加入功能-您可以启用它,以便更清楚地显示有关引用的意图。如果使用此选项,则用于定义可空引用类型的语法与可空值类型的语法相同:

string nonNullableString = null; // Error
string? nullableString = null;   // Ok
请记住,启用不可为空的引用类型意味着所有的引用类型后面都不跟?将不可为空;这可能需要您在应用程序中进行大量更改

所以你有两个选择。要么启用不可为null的引用类型,然后需要显式标记要为null的类型,要么坚持使用可为null的引用类型,只使用string而不是string?为了同样的结果。我鼓励默认情况下使用不可为null的类型,因为它有助于避免一整类非常常见的编程错误。

如果您不使用C 8:

反对?不存在。对象已可为空

名单?不存在。列表已可为空

如果要使用可为空的引用类型,则必须更新编译器版本

如果不使用C 8:

反对?不存在。对象已可为空

名单?不存在。列表已可为空


如果要使用可为空的引用类型,则必须更新编译器版本

可为null的类型要求T是不可为null的值类型,例如int或DateTime。字符串或列表之类的引用类型可以已为null。允许像Nullable这样的东西是没有意义的,所以它是不允许的。

可Nullable类型要求T是不可为null的值类型,例如int或DateTime。字符串或列表之类的引用类型可以已为null。允许Nullable这样的东西是没有意义的,所以它是不被允许的。

你尝试过Nullable吗?你使用的是哪个c版本?听起来你基本上需要:1确保你使用的是c 8编译器;2确保您已将其设置为正确的语言版本;3启用可为null的引用类型。@JamalSalman C 7不,可为null的引用类型肯定不起作用。如果您使用的是C7,那么您也不会有可为空的引用类型。因此,您可能只需要字符串、列表和对象作为属性类型。您尝试过Nullable吗?您使用的是哪个c版本?听起来您基本上需要:1确保您使用的是c 8编译器;2确保您已将其设置为正确的语言版本;3启用可为null的引用类型。@JamalSalman C 7不,可为null的引用类型肯定不起作用。如果您使用的是C7,那么您也不会有可为空的引用类型。因此,您可能只需要字符串、列表和对象作为属性类型-@Magnus,或者更确切地说,如果您启用不可空引用类型:PNullable引用类型是在C8中引入的-@或者更确切地说,如果启用不可为空的引用t
YPES:在C 8中引入了可引用的引用类型。在C 8中引入了可空引用类型。是的,很可能——但是您的答案甚至没有考虑到他们试图使用可空引用类型,而只是使用错误的编译器版本。对象确实存在,但仅在启用了可空引用类型的C 8中存在。换句话说,如果有人试图编写公共类Foo,但由于使用C 1编译器而出错,您会告诉他们这是无效语法,还是他们需要使用较新的C编译器?可空引用类型是在C 8中引入的。是的,很可能——但是你的答案甚至没有考虑到他们试图使用可空引用类型的可能性,只是在使用错误的编译器版本。对象确实存在,但仅在启用了可空引用类型的C 8中存在。换句话说,如果有人试图编写公共类Foo,但由于使用C 1编译器而出错,您会告诉他们这是无效语法,还是他们需要使用较新的C编译器?可空引用类型是在C 8中引入的。注意那个字符串?它的语法与可空值类型的语法相同,但方法完全不同。可空引用类型是在C8中引入的。注意那个字符串?在这里并不等同于Nullable,它的语法与Nullable值类型相同,但方法完全不同。