【问题标题】:How to return a date or an error? c# .Net如何返回日期或错误? c# .Net
【发布时间】:2022-01-17 00:17:46
【问题描述】:

我正在尝试从输入的日期返回格式为“dd / MM / yyyy”的日期。 如果输入的日期具有以下格式:“dd-mm-yyyy”,我想返回错误:“输入的日期格式无效。” 我分享我的代码:

public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        Debug.Assert(typeToConvert == typeof(DateTime));

        return DateTime.ParseExact(reader.GetString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
    }
}

我尝试执行以下操作,但不正确,因为我必须返回一个 DateTime 变量:

public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        Debug.Assert(typeToConvert == typeof(DateTime));

        try
        {
            return DateTime.ParseExact(reader.GetString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
        }
        catch (Exception ex)
        {
            var error = "Date format error";
            return error;
        }
    }
}

我希望你能帮助我!谢谢

【问题讨论】:

  • 在 C# 中“返回错误”的正常方法是抛出异常。您不想这样做有什么特别的原因吗?
  • 是的,我想象得到。我想简单地返回一个错误:“输入的日期格式不正确”@RB。
  • @GianfrancoGrigera 正如RB所说,您要么需要抛出异常,要么使用“任一”单子模式。例外会更干净。
  • 完美!非常感谢!再来一问。如何返回异常?因为既然我在做,它对我不起作用。 @RichardDeeming
  • @GianfrancoGrigera 你没有返回异常;你抛出一个异常。 Exceptions and Exception Handling | Microsoft Docs

标签: c# linq .net-core


【解决方案1】:

在这种情况下,您正在实现JsonConverter&lt;T&gt;,这意味着实现应该符合类的预期行为,即当输入值无法转换时抛出JsonException

public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        Debug.Assert(typeToConvert == typeof(DateTime));

        if (DateTime.TryParseExact(reader.GetString(), "dd/MM/yyyy", 
            CultureInfo.InvariantCulture, DateTimeStyles.None, out var result) 
        {
           return result;
        }
        else throw new JsonException();
    }
}

我使用TryParseExact,所以不需要捕获异常。

【讨论】:

  • 完美!这对我帮助很大!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2013-11-08
相关资源
最近更新 更多