简而言之:我发现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 …Run Code Online (Sandbox Code Playgroud) 我想知道用于轮询属性值的最简单代码,以在其getter中执行代码.
目前我正在使用:instance.property.ToString();,但我宁愿有一些没有可能的副作用或不必要的开销.
我正在尝试将一个db-data的子集放在IMemoryCache中,但是第二次调用该应用程序时,我收到一个错误:
ObjectDisposedException:无法访问已处置的对象.此错误的常见原因是处理从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例.如果您在上下文中调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况.如果使用依赖项注入,则应该让依赖项注入容器负责处理上下文实例.对象名称:'WebDbContext'.
我的代码段:
public class ArticleRepository : IArticleRepository
{
private readonly WebDbContext _WebDbContext;
private readonly IMemoryCache _cache;
public ArticleRepository(WebDbContext WebDbContext, IMemoryCache cache)
{
_WebDbContext = WebDbContext;
_cache = cache;
}
public IQueryable<Articles> WebshopArticles
{
get
{
return _cache.GetOrCreate("WebshopArticles", entry =>
{
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1);
return _WebDbContext.Article.Include(s => s.Details);
});
}
}
public IQueryable<Articles> GetArticles(string category)
{
return WebshopArticles.FirstOrDefault(s => s.Category == Category);
}
}
Run Code Online (Sandbox Code Playgroud)
在第一次将它放入缓存后,看起来像DBContext.我怎么处理这个?