将值设置为对象内的字段"Only"如果该值在 C# 中不为 null



我是C#的新手。我可以在下面使用您的帮助。我有以下代码。

    private void foo(TropicalRequest tropicalRequest)
    {
    var buildRequest = new RestRequest()
     {
      BaseUrl = tropicalRequest.baseUrl,
      StatusCode = tropicalRequest.statusCode,
      InitialDate = tropicalRequest.createdDate.Value
     };
    //Code call to save into DB
    }

"tropicalRequest.createdDate.Value"字段不包含每个场景的值,当它为空时,我的代码会中断。我已经编写了下面的代码,但我想优化它,非常感谢您的帮助。

    private void foo(TropicalRequest tropicalRequest)
    {
    var buildRequest = new RestRequest()
     {
      BaseUrl = tropicalRequest.baseUrl,
      StatusCode = tropicalRequest.statusCode
     };
    if(tropicalRequest.createdDate.HasValue)
      buildRequest.InitialDate = tropicalRequest.CreatedDate.Value;
    //Code call to save into DB
    }

基本上,我想仅在值不为 null 时才将值设置为对象内的字段。

编辑#1:InitialDate和CreatedDate都是数据类型DateTimeOffset。

编辑#2:InitialDate不可为空,CreatedDate可为空的DateTimeOffset。

您可以使用空传播运算符:

var buildRequest = new RestRequest()
 {
  BaseUrl = tropicalRequest.baseUrl,
  StatusCode = tropicalRequest.statusCode,
  InitialDate = tropicalRequest.createdDate ?? default(DateTimeOffset)
 };

编译器已经对其进行了优化。如果您只想以不同的方式设置代码格式,则可以使用此语法。因此,如果有值,将使用 CreatedDate,否则将使用 ??语法,在本例中为 default(DateTimeOffset),这与未分配相同。因此,有人可能会争辩说您当前的语法实际上比这"更好"。

private void foo(TropicalRequest tropicalRequest)
{
    var buildRequest = new RestRequest()
    {
        BaseUrl = tropicalRequest.baseUrl,
        StatusCode = tropicalRequest.statusCode,
        InitialDate = tropicalRequest.CreatedDate ?? default(DateTimeOffset);
    };
}

由于您的 InitialDate 是非空的 DateTimeOffset 它,即使您没有分配它,它也将始终初始化为 DateTimeOffset 的默认值。

一个重要的注意事项,DateTime 对象的默认值是它的MinValue这意味着如果您没有分配任何内容,则意味着其值将01/01/0001 00:00:00。考虑第二个示例中null tropicalRequest.CreatedDate,则buildRequest.InitialDate将是最小值。

如果您希望它null意味着它应该是Nullable类型。 可以使用以下语法来定义它们。

DateTime? InitialDate;

如果你在类中这样声明,那么你不需要检查HasValue属性。 你可以像这样直接分配InitialDate = tropicalRequest.createdDate

正如另一个答案所述,如果您使用的是 Null 条件运算符运算符,则可以尝试 c# 6.0 . 否则 使用条件运算符:

var buildRequest = new RestRequest()
 {
  BaseUrl = tropicalRequest.baseUrl,
  StatusCode = tropicalRequest.statusCode,
  InitialDate = tropicalRequest.createdDate.HasValue ? tropicalRequest.CreatedDate.Value : DateTime.MinValue;
 };

相关内容

  • 没有找到相关文章

最新更新