C# 此代码有任何性能问题吗

C# 此代码有任何性能问题吗,c#,C#,这可能有点过头了,但我想要的是一个函数,如果数据库中的值不为null,则为我的class属性赋值,如果为null,则不执行任何操作。我可以用if语句来实现这一点,但我只需要一行。我想让它在我的代码中随处可见,但在这样做之前,我只是想知道这是否是考虑性能的正确方法。谢谢 调用代码:赋值(变量、值) Utils功能: public static void Assign(object value, ref Boolean variable) { if (IsRealString(value))

这可能有点过头了,但我想要的是一个函数,如果数据库中的值不为null,则为我的class属性赋值,如果为null,则不执行任何操作。我可以用if语句来实现这一点,但我只需要一行。我想让它在我的代码中随处可见,但在这样做之前,我只是想知道这是否是考虑性能的正确方法。谢谢

调用代码:赋值(变量、值)

Utils功能:

public static void Assign(object value, ref Boolean variable)
{
    if (IsRealString(value)) // Check 
    {
        switch (IsBoolean(value.ToString())) { case true: variable = Convert.ToBoolean(value); break; }
    }
}

public static Boolean IsBoolean(String s)
{
    Boolean bit;
    if (Boolean.TryParse(s, out bit))
        return true;
    else
        return false;
}

public static bool IsRealString(object s)
{
    return s != null && !String.IsNullOrEmpty(s.ToString());
}

您对布尔类型执行switch语句有什么原因吗?这就是如果陈述是为了什么。我在这里看不到任何性能敏感的代码。去解决更大的实际问题,停止追逐鬼魂。

你为什么要对布尔类型执行switch语句?这就是如果陈述是为了什么。我在这里看不到任何性能敏感的代码。去解决更大的实际问题,停止追逐鬼魂。

我将按如下方式编写
IsRealString
方法:

public static bool IsRealString(object s)
{
    return String.IsNullOrEmpty(s);
}
但当然,这并没有带来速度方面的真正改善:)

第二个功能是:

public static Boolean IsBoolean(String s)
{
    Boolean bit = false;
    return Boolean.TryParse(s, out bit);
}

我将按如下方式编写
IsRealString
方法:

public static bool IsRealString(object s)
{
    return String.IsNullOrEmpty(s);
}
但当然,这并没有带来速度方面的真正改善:)

第二个功能是:

public static Boolean IsBoolean(String s)
{
    Boolean bit = false;
    return Boolean.TryParse(s, out bit);
}

没什么大不了的,但是您将
转换为布尔值两次,并将
开关
语句用作
if
语句。这里真正的问题是可读性,而不是性能。我建议简化一些事情:

public static void Assign(object value, ref bool variable)
{
    if (value == null) return;

    bool result;
    if (Boolean.TryParse(value.ToString(), out result))
    {
        variable = result;
    }
}

没什么大不了的,但是您将
转换为布尔值两次,并将
开关
语句用作
if
语句。这里真正的问题是可读性,而不是性能。我建议简化一些事情:

public static void Assign(object value, ref bool variable)
{
    if (value == null) return;

    bool result;
    if (Boolean.TryParse(value.ToString(), out result))
    {
        variable = result;
    }
}

如果存在任何性能问题,您应该能够使用探查器对其进行测量。在你不测量它们之前,不要试图提高性能。在封装这段代码时,您仍然能够轻松地对其进行改进

但是请注意,如果您有一个数据库,那么数据库将是您的瓶颈,而不是代码的这一部分。绝对是


您不应该尝试加速代码的原因是,它通常会降低代码的可读性。但是,您可以遵循其他人提出的建议(如果不使用switch,请简化IsRealString()),还可以考虑是否真的需要IsBoolean()或从Assign()调用Boolean.TryParse,因为这实际上会提高可读性

如果出现任何性能问题,您应该能够使用探查器对其进行测量。在你不测量它们之前,不要试图提高性能。在封装这段代码时,您仍然能够轻松地对其进行改进

但是请注意,如果您有一个数据库,那么数据库将是您的瓶颈,而不是代码的这一部分。绝对是


您不应该尝试加速代码的原因是,它通常会降低代码的可读性。但是,您可以遵循其他人提出的建议(如果不使用switch,请简化IsRealString()),还可以考虑是否真的需要IsBoolean()或从Assign()调用Boolean.TryParse,因为这实际上会提高可读性

代码中有一些问题远远超出了性能。首先,担心正确性和可读性,然后担心性能——这应该通过测量/分析来完成。这类代码不太可能成为瓶颈,因此从这里开始“优化”不太值得您花费时间

请注意,
IsRealString
不会返回可靠的答案。该方法接受一个对象,因此任何对象的默认
ToString
将给出一些非空字符串,该字符串将返回true

你说你想要:

如果值 来自数据库的值不为null,如果为null,则不执行任何操作

你可以稍微澄清一下:

  • 如果数据库中的值为null,则不执行任何操作
  • 否则,将该值指定给我的类属性
  • 现在你已经有了一个简洁明了的函数定义。如果您的实现遵循该描述,那么它可能是简单的正确的,这是一个很好的起点

    因此,让我们尝试一下:

    public static void Assign(object value, ref bool variable)
    {
        if (value == null) return;
    
        // We're assuming that a valid value will always be a string.  If this is not the
        // case, then we need to handle other types
    
        string valueString = value as string;
    
        bool result;
        if (bool.TryParse(valueString, out result))
        {
            variable = result;
        }
    }
    
    注意:这与Greg的示例相同,只是我不想调用
    ToString()
    ,因为我们不知道对象的实现是做什么的


    我们还发现了“规范”定义的一个问题。您(和我的)代码中的假设是,如果一个值被“设置”,它将始终被设置为字符串。您可以有一个数据集,其中的值不是字符串。例如,如果值是
    布尔值
    ,则解析
    值字符串
    将不会给出有效的结果。这实际上取决于数据集包含的内容。

    代码中有一些问题远远超出了性能。首先,担心正确性和可读性,然后担心性能——这应该通过测量/分析来完成。这类代码不太可能成为瓶颈,因此从这里开始“优化”不太值得您花费时间

    请注意,
    IsRealString
    不会返回可靠的答案。该方法接受一个对象,因此任何对象的默认
    ToString
    将给出一些非空字符串,该字符串将返回true

    你说你想要:

    如果值 来自数据库的值不为null,如果为null,则不执行任何操作

    你可以稍微澄清一下:

  • 如果数据库中的值为null,则不执行任何操作
  • 否则,将该值指定给我的类属性
  • 现在你已经有了一个简洁明了的函数定义。