【问题标题】:Optimize parsing more and more.... in C# [closed]在 C# 中越来越多地优化解析.... [关闭]
【发布时间】:2014-07-12 12:24:45
【问题描述】:

我有以下用于解析的 C# 代码...您认为这是最优化的还是我应该使用这些函数本身所需的通用方法或优化?

public static bool GetDBBool(object value)
{
    var result = false;

    if (value != null && string.IsNullOrEmpty(value.ToString()) == false)
        bool.TryParse(value.ToString(), out result);

    return result;
}

public static int GetDBInt(object value)
{
    var result = -999;

    if (value != null && string.IsNullOrEmpty(value.ToString()) == false)
        int.TryParse(value.ToString(), out result);

    return result;
}

public static double GetDBDouble(object value)
{
    var result = -999.00;

    if (value != null && string.IsNullOrEmpty(value.ToString()) == false)
        double.TryParse(value.ToString(), out result);

    return result;
}

public static DateTime GetDBDate(object value)
{
    var result = DateTime.Now;

    if (value != null && string.IsNullOrEmpty(value.ToString()) == false)
        DateTime.TryParse(value.ToString(), out result);

    return result;
}

public static DateTime? GetDBNullableDate(object value)
{
    DateTime date;
    if (value != null && string.IsNullOrEmpty(value.ToString()) == false)
        return DateTime.TryParse(value.ToString(), out date) ? date : (DateTime?)null;
    else
        return null;
}

【问题讨论】:

  • 如果您是初级开发人员并想学习代码,请使用learncs.org 了解此代码的作用。
  • 我认为不清楚这是做什么的,只是不清楚你在问什么。就像@psubsee 所说,如果你想进行代码审查,请去 CodeReview。
  • 你当然可以使用泛型并减少你拥有的代码量——这是否被认为是“优化”是有争议的,但它肯定是一个更简洁的解决方案

标签: c# c#-4.0


【解决方案1】:

那里没有什么可以优化的了。我怀疑 THIS 是你程序中最慢的地方。

但是你的空值有点奇怪。 -999 的数字? DateTime.Now 用于日期时间?你确定这不会导致其他代码出现问题吗?这些是非常正常的值,这意味着其他代码将无法区分您是空值还是实际值。而这个默认值对于其他代码来说可能是错误的。

如果是我,我会用 0 表示整数,DateTime.MinValue 表示 DateTime。或者更好 - 一直坚持使用可空值。

【讨论】:

  • 即使 0 表示 int 也不是很好,我认为最好使用 Nullable
  • @James - 我知道,但如果你绝对必须有不可为空的数字,那么最好坚持 .NET 认为的“默认”值。否则你只会迷惑别人。
【解决方案2】:

"== false" 不太可读。采用 !而是。

如果“对象值”已经是所需类型(例如 DateTime),则将其转换为字符串然后再返回会更慢。

我会改写

if (value is DateTime) return (DateTime)value;

我不会使用 var result = -999;作为返回值。

如果转换失败,您可以返回 Int32.MinValue(优于 -999)或 null。

也许您也想检查 DBNull.Value?所以首先我会检查 null 和 DBNull.Value,然后“值是 DateTime”检查,最后是 DateTime.TryParse。

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多