为什么这个坏代码?

时间:2009-10-14 13:56:07

标签: c# .net

我在这里看到一个关于承认你写的最糟糕的代码的问题,我不太确定,因为我不知道为什么这是错误的代码。

public string GetUsername (string userName)
{
    User user = DbLookup.GetUser(userName);
    return user.Username;
}

是否因为它会假定username存在并且不检查null?或者还有更多吗?

https://stackoverflow.com/questions/130965/what-is-the-worst-code-youve-ever-written/191969#191969

6 个答案:

答案 0 :(得分:17)

因为它返回的是用户作为输入发送给方法的相同内容...用户名

答案 1 :(得分:5)

它不会返回提供的相同字符串。它从数据库返回用户名,用户可能存在也可能不存在 - 因此它可以返回null。考虑到它的作用,方法名称可能不正确。有人在原帖中提到它应该是CheckIfUsernameExistsAndReturn sorta方法名。

答案 2 :(得分:3)

除了给定的答案之外,这个方法实际上是令人困惑的,现在维护者必须深入研究它的作用。

答案 3 :(得分:2)

因为他返回了传递给方法的相同字符串。

答案 4 :(得分:1)

因为如果用户存在,它只返回与方法参数一样提交的相同值,如果用户不存在,则会抛出空引用异常。

答案 5 :(得分:1)

如前所述,由于该方法实际上是多余的,因此它是错误的代码。它返回(假设User.Username与参数相同)参数的相同值。但是,正如您提到的另一个原因是它不好是因为它在尝试返回用户名之前没有检查User是否为null。

另一个潜在的问题是GetUser可能引发一个未在该方法中处理的异常(它确实可以在外部或内部处理)。只是一个想法...

改进是返回User对象而不是用户名本身:

public User GetUser(string username)
{
     try
     {
          return DBLookup.GetUser(username);
     }
     catch (DBLookupException ex)
     {
          // throw exception or handle exception
          return null;
     }
}