C# 我可以覆盖Convert.ToDateTime()吗?

C# 我可以覆盖Convert.ToDateTime()吗?,c#,datetime,C#,Datetime,我是否可以重写Convert.ToDateTime()?我不想100次或更多地检查字符串是否为nul,如果不是,则将其转换为DateTime。我是否可以重写此函数以检查是否为null,然后以其他方式将其转换为null。如果您确定字符串的格式正确,则可以使用DateTime.Parse。否,您不能重写静态方法。但您可以编写自己的静态方法: // TODO: Think of a better class name - this one sucks :) public static class Mo

我是否可以重写Convert.ToDateTime()?我不想100次或更多地检查字符串是否为nul,如果不是,则将其转换为DateTime。我是否可以重写此函数以检查是否为null,然后以其他方式将其转换为null。

如果您确定字符串的格式正确,则可以使用
DateTime.Parse

否,您不能重写静态方法。但您可以编写自己的静态方法:

// TODO: Think of a better class name - this one sucks :)
public static class MoreConvert
{
    public static DateTime? ToDateTimeOrNull(string text)
    {
        return text == null ? (DateTime?) null : Convert.ToDateTime(text);
    }
}
请注意,返回类型必须是
DateTime?
,因为
DateTime
本身是不可为空的值类型


您可能还想考虑使用,而不是<代码>转换。ToDateTime < /代码> -我从来没有特别喜欢它宽松的、当前的特定于文化的行为。但这取决于数据来自何处。你知道格式吗?它是在用户的文化中,还是在不变的文化中?(基本上,它是用户输入的文本,还是某种机器生成的格式?

ToDateTime
不能被覆盖,但您可以使用
TryParse

bool valid = DateTime.TryParse("date string", out d);

您不能不使用
DateTime.TryParse
?最好使用
.IsNullOrEmpty
进行检查。@V4Vendetta:这取决于所需的行为-OP没有说希望将空字符串视为与null相同的方式。一个空字符串完全可能表示一个bug。