有没有快速的方法来确定您是否在应用程序中使用某些名称空间.我想删除所有不必要的使用语句,如使用System.Reflection等,但我需要一种方法来确定我是否使用这些库.我知道Resharper工具为你做了这个,但有一个快速,肮脏和自由的方式来做到这一点?
假设我有以下内容:
using(var ctx = DataContextFactory.Create(0))
{ ... Some code ... }
Run Code Online (Sandbox Code Playgroud)
为什么不做以下操作而失去几个花括号?:
var ctx = DataContextFactory.Create(0);
ctx.Dispose();
Run Code Online (Sandbox Code Playgroud)
感谢您的建议!
我使用using语句SqlConnection.它对性能有好处,因为强制调用Dispose()会更快地释放与池的连接.
但是,我意识到在使用中创建的对象无法重新定义.我不能这样做:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//...
connection = new SqlConnection(connectionString2);
//...
connection = new SqlConnection(connectionString3);
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以替换使用,并做这样的事情:
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
//...
connection = new SqlConnection(connectionString2);
//...
connection = new SqlConnection(connectionString3);
}
Run Code Online (Sandbox Code Playgroud)
该SqlConnection不会是最后一次入店后}梅开二度.当对象超出范围时,Dispose()会立即被调用吗?
我很确定我知道答案,但我想知道是否有办法在我的C#项目中定义全局"使用"指令,这样我就不必在每个代码文件的顶部重复该指令.
我的兴趣实际上源于在.NET Framework中引入扩展方法.使用扩展方法的唯一方法是为包含扩展方法的命名空间定义using指令.没有using指令,我失去了扩展方法的Intellisense功能,这意味着我不会总是看到可用的方法.
作为框架开发人员,确保框架中提供的类型和方法清晰可供开发人员使用对我来说至关重要.虽然文档和培训服务于他们的目的,但我发现大多数开发人员都会按时完成并滚动智能感知列表以查看可用的方法和属性.即使他们转到对象浏览器或查看参考文档,他们也不会知道扩展方法,除非他们知道它.这就是Intellisense的用武之地.
而且,虽然我可以将使用指令添加到VS使用的模板,但VS中的"删除并排序"选项将删除引用扩展方法的指令(如果没有使用).
那么,所有这一切,是否有任何方法可以在VS 2010中定义全局"使用"指令?如果没有,MS将来会考虑它的任何机会吗?
c# using-directives using-statement .net-4.0 visual-studio-2010
如果我有以下内容,仍然会在DisposeableObject上调用IDisposeable,还是会因为遇到未处理的异常而保持打开对象?
using ( DisposeableObject = new Object() )
{
throw new Exception("test");
}
Run Code Online (Sandbox Code Playgroud) 我有
void foo1()
{
using(...){...}
}
void foo2()
{
using(...){...}
}
void foo3()
{
using(...){...}
}
Run Code Online (Sandbox Code Playgroud)
我有
void foo()
{
...
backgroundWorker.DoWork += (s, ev) =>
{
try
{
foo1();
foo2();
foo3();
}
catch (Exception ex)
{
// log ex
}
};
...
}
Run Code Online (Sandbox Code Playgroud)
我只是读到了using块吞下异常.它有一种优雅的方式来处理从异常foo1(),foo2()并 foo3()在foo().我不想using在方法中的每个块内部使用try/catch .我确实偶然发现了这篇文章,建议使用扩展方法,但我只是检查是否有更好的方法.
仅供参考,网络断开导致using块内的逻辑抛出异常,这就是我在一个常见的地方尝试处理的问题.
谢谢,
这段代码对我很好:
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr token);
enum LogonType
{
Interactive = 2,
Network = 3,
Batch = 4,
Service = 5,
Unlock = 7,
NetworkClearText = 8,
NewCredentials = 9
}
enum LogonProvider
{
Default = 0,
WinNT35 = 1,
WinNT40 = 2,
WinNT50 = 3
}
private void Button1_Click()
{
IntPtr token = IntPtr.Zero;
LogonUser("Administrator",
"192.168.1.244", …Run Code Online (Sandbox Code Playgroud) 我的名为S的类看起来像这样:
public class S : IDisposable
{
public void Dispose()
{
// some code
}
public void f()
{
throw new Exception("exception");
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用using语句时,f()方法不会调用s.Dispose()方法.我认为它应该调用Dispose方法,即使发生异常.这就是我在MSDN中读到的内容:"using语句确保即使在对象上调用方法时发生异常也会调用Dispose".我错过了什么吗?
using (S s = new S())
{
s.f();
}
Run Code Online (Sandbox Code Playgroud)
调用sf()会结束我的程序而不会丢弃我的对象.我想我不必使用try/catch,因为using语句应该为我做.
我使用EF6(数据库优先)和jtable.org(一个用于创建基于AJAX的CRUD表的JQuery插件)在MVC5中创建了一个小应用程序.
我只使用存储过程与数据库进行交互.即使我在using块中为我创建的每个存储过程调用创建dbcontext,我也会得到Max pool达到的异常:
"System.Data.Entity.Core.EntityException:基础提供程序在打开时失败.---> System.InvalidOperationException:超时已过期.从池中获取连接之前已经过了超时时间.这可能是因为所有池连接都发生了正在使用中,达到了最大池大小."
我花了一天的大部分时间都在试图找出可能出错的地方,但由于处理了dbcontext,处理连接也没那么成功......
即使我读过博客,也说没有必要调用处理... http://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext.html#. VNKTTJ2sWkE
我拥有的每个db调用,它与下面的类似,所有dbcontex都在using块中创建:
public IEnumerable<Jobs_Get_Result> GetJobs(int categoryId, int startIndex, int pageSize)
{
using (var _context = new JobEntities())
{
var jobs = _context.Jobs_Get(categoryId, startIndex, pageSize).ToList();
return jobs;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用数据库优先,模型和EF创建的dbcontext.
知道可能是什么问题吗?
dispose connection-pooling using-statement dbcontext entity-framework-6
前几天我正在重构一些东西,我遇到了这样的事情:
public async Task<Result> Handle(CancelInitiatedCashoutCommand command, CancellationToken cancellationToken)
{
using (_logger.BeginScope("{@CancelCashoutCommand}", command))
{
return await GetCashoutAsync(command.CashoutId)
.Bind(IsStatePending)
.Tap(SetCancelledStateAsync)
.Tap(_ => _logger.LogInformation("Cashout cancellation succeeded."));
}
}
Run Code Online (Sandbox Code Playgroud)
ReSharper 建议将其重构为:
public async Task<Result> Handle(CancelInitiatedCashoutCommand command, CancellationToken cancellationToken)
{
using var scope = _logger.BeginScope("{@CancelCashoutCommand}", command);
return await GetCashoutAsync(command.CashoutId)
.Bind(IsStatePending)
.Tap(SetCancelledStateAsync)
.Tap(_ => _logger.LogInformation("Cashout cancellation succeeded."));
}
Run Code Online (Sandbox Code Playgroud)
我有点怀疑,实际上我不确定Dispose第二个版本何时会发生隐式调用。
我怎么知道?
using-statement ×10
c# ×9
.net ×2
dispose ×2
.net-4.0 ×1
.net-core ×1
asp.net ×1
dbcontext ×1
exception ×1
idisposable ×1
namespaces ×1
scope ×1
using ×1