You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#解析DateTime?类型时处理空值问题

处理可空DateTime的空值问题

你的代码里直接访问result.ReleaseDate.Value.Year,当ReleaseDate为null时会抛出NullReferenceException——因为可空类型的.Value属性不能在值为null时调用。下面是几种实用的处理方式:

方式一:用HasValue判断后取值

通过HasValue属性先检查是否有有效值,有值则取年份,无值显示友好的占位文本:

public void movieSearch(string mov)
{
    SearchContainer<SearchMovie> results = client.SearchMovieAsync(mov).Result;
    Console.WriteLine($"Got {results.Results.Count:N0} of {results.TotalResults:N0} results");
    foreach (SearchMovie result in results.Results)
    {
        string yearText = result.ReleaseDate.HasValue ? result.ReleaseDate.Value.Year.ToString() : "未公布";
        Console.WriteLine($"Movie Title: {result.Title},  Movie ID: {result.Id},  Release Year: {yearText}");
    }
}

方式二:在字符串插值中直接用三元表达式

省去临时变量,直接在插值逻辑里完成判断:

public void movieSearch(string mov)
{
    SearchContainer<SearchMovie> results = client.SearchMovieAsync(mov).Result;
    Console.WriteLine($"Got {results.Results.Count:N0} of {results.TotalResults:N0} results");
    foreach (SearchMovie result in results.Results)                
        Console.WriteLine($"Movie Title: {result.Title},  Movie ID: {result.Id},  Release Year: {result.ReleaseDate.HasValue ? result.ReleaseDate.Value.Year.ToString() : "未公布"}");
}

方式三:用模式匹配简化判断(C# 7.0及以上)

通过模式匹配直接解构可空值为DateTime类型,代码更简洁直观:

public void movieSearch(string mov)
{
    SearchContainer<SearchMovie> results = client.SearchMovieAsync(mov).Result;
    Console.WriteLine($"Got {results.Results.Count:N0} of {results.TotalResults:N0} results");
    foreach (SearchMovie result in results.Results)
    {
        string yearText = result.ReleaseDate is DateTime releaseDate ? releaseDate.Year.ToString() : "未公布";
        Console.WriteLine($"Movie Title: {result.Title},  Movie ID: {result.Id},  Release Year: {yearText}");
    }
}

方式四:用GetValueOrDefault设置默认值(适合需要默认年份的场景)

如果希望null时返回一个默认年份(比如0),可以用GetValueOrDefault,但注意要处理默认值的显示:

public void movieSearch(string mov)
{
    SearchContainer<SearchMovie> results = client.SearchMovieAsync(mov).Result;
    Console.WriteLine($"Got {results.Results.Count:N0} of {results.TotalResults:N0} results");
    foreach (SearchMovie result in results.Results)
    {
        int year = result.ReleaseDate.GetValueOrDefault().Year;
        string yearText = year == 1 ? "未公布" : year.ToString(); // DateTime.MinValue的Year为1,需特殊处理
        Console.WriteLine($"Movie Title: {result.Title},  Movie ID: {result.Id},  Release Year: {yearText}");
    }
}

内容的提问来源于stack exchange,提问作者ronniej962

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:00:14