简而言之:我发现Java反模式是不可或缺的资源.适合初学者和专业人士.我还没有为C#找到这样的东西.所以我将这个问题作为社区维基开放,并邀请所有人分享他们对此的了解.由于我是C#的新手,我对此很感兴趣,但不能从一些反模式开始:/
以下是我发现C#而不是其他语言的答案.
我只是复制/粘贴这些!考虑看看这些评论.
NullReferenceException抛出错误的异常:
if (FooLicenceKeyHolder == null)
throw new NullReferenceException();
Run Code Online (Sandbox Code Playgroud)
类中的公共变量(改为使用属性).
除非该类是一个简单的数据传输对象.
if (myBooleanVariable == true)
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好
if (myBooleanVariable != false)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样的结构通常使用C和C++开发,其中一个布尔值的想法只是一个约定(0 ==假的,什么都为true); 在C#或其他具有真正布尔值的语言中,这不是必需的(或可取的).
using()没有using在适当的地方使用:
object variable;
variable.close(); //Old code, use IDisposable if available.
variable.Dispose(); //Same as close. Avoid if possible use the using() { } pattern.
variable = null; //1. in release optimised away. 2. C# is GC so this doesn't do what was intended anyway.
Run Code Online (Sandbox Code Playgroud)
rei*_*ein 62
错误地重新抛出异常.要重新抛出异常:
try
{
// do some stuff here
}
catch (Exception ex)
{
throw ex; // INCORRECT
throw; // CORRECT
throw new Exception("There was an error"); // INCORRECT
throw new Exception("There was an error", ex); // CORRECT
}
Run Code Online (Sandbox Code Playgroud)
And*_*ith 40
GC.Collect() 收集而不是信任垃圾收集器.
小智 30
在Java和C#中我都看到了这种方式太多了......
if(something == true){
somethingelse = true;
}
Run Code Online (Sandbox Code Playgroud)
如果它也有奖励积分
else{
somethingelse = false;
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*nny 22
我看到以下代码:
if (i==3)
return true;
else
return false;
Run Code Online (Sandbox Code Playgroud)
应该:
return (i==3);
Run Code Online (Sandbox Code Playgroud)
lep*_*pie 17
侮辱德米特法则:
a.PropertyA.PropertyC.PropertyB.PropertyE.PropertyA =
b.PropertyC.PropertyE.PropertyA;
Run Code Online (Sandbox Code Playgroud)
lep*_*pie 17
投掷NullReferenceException:
if (FooLicenceKeyHolder == null)
throw new NullReferenceException();
Run Code Online (Sandbox Code Playgroud)
dmp*_*lla 16
这是真的,我亲眼看到了它.
public object GetNull()
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
它实际上是在应用程序中使用的,甚至还有一个存储过程也可以使用它,sp_GetNull将返回null ....
这使我的一天.
我认为sp用于经典的asp站点......与结果集有关..net的一个想法是将代码"转换"成.net ...
lep*_*pie 14
int foo = 100;
int bar = int.Parse(foo.ToString());
Run Code Online (Sandbox Code Playgroud)
或者更一般的情况:
object foo = 100;
int bar = int.Parse(foo.ToString());
Run Code Online (Sandbox Code Playgroud)
Adr*_*der 12
我在我们的项目中发现了这一点,几乎打破了主席......
DateTime date = new DateTime(DateTime.Today.Year,
DateTime.Today.Month,
DateTime.Today.Day);
Run Code Online (Sandbox Code Playgroud)
Chr*_*arz 11
我经常偶然发现这种滥用:
var ok = Bar();
Run Code Online (Sandbox Code Playgroud)
甚至更好:
var i = AnyThing();
Run Code Online (Sandbox Code Playgroud)
以这种方式使用var毫无意义,也没有任何收获.它只是让代码更难以遵循.
ant*_*ony 10
Bev*_*van 10
不理解bool是一个真正的类型,而不仅仅是一个约定
if (myBooleanVariable == true)
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好
if (myBooleanVariable != false)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样的结构通常使用C和C++开发,其中一个布尔值的想法只是一个约定(0 ==假的,什么都为true); 在C#或其他具有真正布尔值的语言中,这不是必需的(或可取的).
更新:重新描述最后一段以提高其清晰度.
类中的公共变量(改为使用属性).
除非该类是一个简单的数据传输对象.
请参阅下面的评论以供讨论和澄清.
我实际看到过这个.
bool isAvailable = CheckIfAvailable();
if (isAvailable.Equals(true))
{
//Do Something
}
Run Code Online (Sandbox Code Playgroud)
击败isAvailable == true反模式的手!
使这成为一个超级反模式!
object variable;
variable.close(); //Old code, use IDisposable if available.
variable.Dispose(); //Same as close. Avoid if possible use the using() { } pattern.
variable = null; //1. in release optimised away. 2. C# is GC so this doesn't do what was intended anyway.
Run Code Online (Sandbox Code Playgroud)
私人自动实施的属性:
private Boolean MenuExtended { get; set; }
Run Code Online (Sandbox Code Playgroud)
在每个方法的顶部声明和初始化所有局部变量是如此丑陋!
void Foo()
{
string message;
int i, j, x, y;
DateTime date;
// Code
}
Run Code Online (Sandbox Code Playgroud)
两个字符串反模式
Anti-Pattern#1
检查字符串是否为null或为空
//Bad
if( myString == null || myString == "" )
OR
if( myString == null || myString.Length == 0 )
//Good
string.IsNullOrEmpty(myString)
Run Code Online (Sandbox Code Playgroud)
反模式#2(仅适用于.NET 4.0)
检查字符串是否为空或空或空格
//Bad
if( myString == null || myString == "" || myString.Trim() == "")
//Good
string.IsNullOrWhiteSpace(myString)
Run Code Online (Sandbox Code Playgroud)
不用铸造(请相信编译器):
foreach (UserControl view in workspace.SmartParts)
{
UserControl userControl = (UserControl)view;
views.Add(userControl);
}
Run Code Online (Sandbox Code Playgroud)
if(data != null)
{
variable = data;
}
else
{
variable = new Data();
}
Run Code Online (Sandbox Code Playgroud)
可以写得更好
variable = (data != null) ? data : new Data();
Run Code Online (Sandbox Code Playgroud)
甚至写得更好
variable = data ?? new Data();
Run Code Online (Sandbox Code Playgroud)
最后的代码清单适用于.NET 2.0及更高版本
| 归档时间: |
|
| 查看次数: |
28493 次 |
| 最近记录: |