我正在查看一些带有巨大的switch语句和每个case的if-else语句的代码,并立即感受到优化的冲动.作为一个优秀的开发人员,我总是应该着手获得一些硬性时序事实,并从三个变体开始:
原始代码如下所示:
public static bool SwitchIfElse(Key inKey, out char key, bool shift)
{
switch (inKey)
{
case Key.A: if (shift) { key = 'A'; } else { key = 'a'; } return true;
case Key.B: if (shift) { key = 'B'; } else { key = 'b'; } return true;
case Key.C: if (shift) { key = 'C'; } else { key = 'c'; } return true;
...
case Key.Y: if (shift) { key = 'Y'; } else { key …
Run Code Online (Sandbox Code Playgroud)c# performance if-statement conditional-operator micro-optimization
查看Azure ACS生成的请求URL时,我可以看到ACS包含电子邮件,全名,名字和姓氏作为所需声明.此外,fullname属性映射到http://axschema.org/namePerson
声明类型.
现在我已将MyOpenID添加为身份提供者.MyOpenID无法识别axschema声明,但我已成功http://schema.openid.net/namePerson
从MyOpenID中检索到.
但问题是,即使我将http://schema.openid.net/namePerson
声明作为与ACS中的MyOpenID声明发布者相关的规则添加,声明也不会包含在ACS生成的请求URL中.
是否有任何(隐藏)方法来配置要求此声明的请求?或者甚至更好,更改内置映射以使用schema.openid.net/namePerson
类型而不是axschema.org/namePerson
?
我已经阅读了LGPL许可证,但它非常复杂,我无法找到问题的答案.
我想在我的项目中使用LGPL库.LGPL库中不会进行任何更改.该项目是注册用户使用的网站应用程序.注册用户不需要使用该网站.
所以我的问题是我可以在这种情况下使用LGPL库吗?
我在WPF应用程序中使用MV-VM模式.我将ViewModel绑定到ContentControl并使用窗口资源中定义的数据模板来呈现该ViewModel的视图(UserControl).
在ViewModel中,我有一组项目.我将该集合绑定到WPF工具包中提供的数据网格.同样在视图模型中,我定义了一个RemoveItem命令,该命令接受要删除的项ID的参数.
如何在数据网格中绑定该命令?网格的数据上下文就是那个集合,所以类似于:
<Button Command="{Binding Path=RemoveCommand}" CommandParameter="{Binding Path=id}">X</Button>
Run Code Online (Sandbox Code Playgroud)
不起作用 - 它找不到命令.我想我需要做RelativeSource绑定,但那会是什么样子?Ancestor类型是UserControl还是ContentControl?我的ViewModel作为DataContext驻留在哪里?
还是我离开这里?
有没有人有关于Autofac如何帮助管理NHibernate ISession实例的任何提示或最佳实践(在ASP.NET MVC应用程序的情况下)?
您对如何在.Net中实施一次性物品有何看法?你如何解决实现IDisposable类的重复性?
我觉得IDisposable类型不是他们应该去过的一流公民.太多是由开发人员的怜悯.
具体来说,我想知道是否应该在语言和工具方面提供更好的支持,以确保一次性物品的正确实施和妥善处理.
例如,在C#中,如果需要实现一次性语义的类可以像这样声明:
public class disposable MyDisposableThing
{
~MyDisposableThing()
{
// Dispose managed resources
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器可以轻松生成IDisposable接口的实现.析构函数~MyDisposableThing可以转换为应该释放托管资源的实际Dispose方法.
中间C#代码如下所示:
public class MyDisposableThing : IDisposable
{
private void MyDisposableThingDestructor()
{
// Dispose my managed resources
}
~MyDisposableThing()
{
DisposeMe(false);
}
public void Dispose()
{
DisposeMe(true);
GC.SuppressFinalize(this);
}
private bool _disposed;
private void DisposeMe(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// Call the userdefined "destructor"
MyDisposableThingDestructor();
}
}
_disposed = true;
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以实现更清晰的代码,更少的样板处理代码以及处理托管资源的一致方式.对于边缘情况和非托管资源,仍然支持手动实现IDisposable.
确保实例得到妥善处理是另一项挑战.请考虑以下代码:
private string ReadFile(string filename)
{ …
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用log4net,有一个问题.该程序的主要功能需要很长时间,我使用日志记录来保存有关它的信息.我使用FileAppender将日志保存到文件.
我的应用程序位于共享(本地)文件夹中,可能有多个应用程序实例从一个路径运行.在这种情况下,我只能从第一个程序记录信息,我的应用程序的其他实例无法记录信息,因为日志文件已被锁定.
当我使用"log4net.Appender.FileAppender + MinimalLock"选项时,会出现信息丢失的情况.并非所有来自两个实例的日志都保存到文件中.
如何从并行实例中解决此问题和日志信息?当我使用"MinimalLock"选项时性能下降呢?
谢谢.希望得到你的帮助.
我知道当你通过调用BeginInvoke()或ThreadPool.QueueUserWorkItem(...)并行运行某个方法时,.NET框架正在捕获包含代码访问安全信息和其他一些东西的ExecutionContext对象.
我想要的是在ExecutionContext中包含我的并行方法所需的一些数据,但也必须在排队任务时捕获.
问题是我并不总是能控制创建此并行任务的代码,所以我必须找到一种方法来存储这些数据,然后再调用这个外部代码.这就是为什么我想到ExecutionContext类.
当我并不总是控制在线程之间分割工作的代码时,有没有办法将某个状态传递给并行任务.
我希望在log4net消息中包含调用堆栈(例如,调用我的方法).有这样做的标准方法吗?
(我知道这会很慢,但我只需要做一些错误)
我从不使用加密库,但我想用私钥加密字符串并通过公钥解密.如何在c#中实现这一点.请帮我一个小代码片段.谢谢
.net ×3
c# ×3
log4net ×2
acs ×1
appfabric ×1
autofac ×1
azure ×1
data-binding ×1
debugging ×1
encryption ×1
fileappender ×1
idisposable ×1
if-statement ×1
lgpl ×1
licensing ×1
logging ×1
mvvm ×1
nhibernate ×1
performance ×1
wpf ×1