C# 8中基本数据类型除了 string (string是引用类型)外,int、long、float、double、decimal、char、bool (这7中都是值类型)都可以声明为可空值类型。且在方法中使用时,参数位置也没有可空值类型必须在非可空值类型后面的限制,可空值类型可以定义在方法参数列表的前中后任何位置。
struct(结构) 类型是值类型,也可以声明为可空值类型。
对于 string 类型,可以用 string.Empty 输出空值。另外,除了 string.Empty 外,string 类型也可直接赋值为 null。如下:
string str = null; // 合法代码如下所示:
string str = string.Empty; // 合法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 可空类型
{
class Program
{
static void Main(string[] args)
{
Student student1 = new Student();
student1.StudentInformation(12, "boy", 18, 180, 86.0F,
90.0, 95.0M, 85.0F, "Steven", 'A', true, 168);
Console.WriteLine();
student1.StudentInformation(12, "boy", null, null, null,
null, null, 85.0F, "Steven", null, null, 168);
Console.WriteLine();
student1.StudentInformation(12, string.Empty, null, null, null,
null, null, 85.0F, string.Empty, null, null, 168);
// 对于 string 类型,可以用 string.Empty 输出空值
Console.WriteLine();
student1.StudentInformation(12, null, null, null, null,
null, null, 85.0F, null, null, null, 168);
// 把 赋值给 string 类型的 string.Empty
// 换成 null 后可得到同样的输出
}
}
class Student
{
//public Student()
//{
// 默认构造器注释掉,依然可以运行,实际上程序会自己建一个隐藏的默认构造器
//}
public void StudentInformation(
int schoolAge,
string sex,
int? age,
long? height,
float? mathScore,
double? biologyScore,
decimal? geographyScore,
float artScore,
string name,
char? scoreGrade,
bool? passed,
int ID)
{
Console.WriteLine("Name: {0}", name);
Console.WriteLine("ID: {0}", ID);
Console.WriteLine("Sex: {0}", sex);
Console.WriteLine("Age: {0}", age);
Console.WriteLine("SchoolAge: {0}", schoolAge);
Console.WriteLine("Height: {0}", height);
Console.WriteLine("MathScore: {0}", mathScore);
Console.WriteLine("ArtScore: {0}", artScore);
Console.WriteLine("BiologyScore: {0}", biologyScore);
Console.WriteLine("GeographyScore: {0}", geographyScore);
Console.WriteLine("ScoreGrade: {0}", scoreGrade);
Console.WriteLine("Passed: {0}", passed);
}
}
}
运行后结果如下所示: