小编Bor*_* B.的帖子

C#try..catch - 将错误处理流从一个catch重定向到下一个catch

我有一个try..catch块,看起来像这样:

try
{
    ...
}
catch (IOException ioEx)
{
    ...
}
catch (Exception ex)
{
    ... 
}
Run Code Online (Sandbox Code Playgroud)

我想处理某种IOException,即共享冲突(Win32 0x20).其他IOExceptions和所有其他Exception后代应该通过第二个catch-all catch来处理.

一旦我知道IOException不是共享冲突,我怎样才能将错误处理流程干净地重定向到一般catch?如果我在catch (IOException)第二次捕获中重新抛出则不会调用.我知道我可以嵌套try..catches但是有更清洁的方法吗?

编辑:关于分解处理程序逻辑

在方法中考虑重复的代码肯定会起作用,但我注意到,一般来说,当你使用因式方法进行异常处理时,它往往会产生微妙的问题.

首先,一个catch子句可以在异常之前直接访问所有局部变量.但是当你将异常处理"外包"到另一种方法时,你必须将状态传递给它.当您更改代码时,处理程序方法的签名也会发生更改,这可能是更复杂方案中的可维护性问题.

另一个问题是程序流程可能会模糊不清.例如,如果处理程序方法最终重新抛出异常,那么像Resharper这样的C#编译器和代码分析器看不到它:

    private void Foo()
    {
        string a = null;

        try
        {
            a = Path.GetDirectoryName(a);
            System.Diagnostics.Debug.Print(a);
        }
        catch (Exception ex)
        {                
            HandleException(ex, a); //Note that we have to pass the "a"
            System.Diagnostics.Debug.Print(
                "We never get here and it's not obvious" + 
                "until you read and understand …
Run Code Online (Sandbox Code Playgroud)

c# try-catch

5
推荐指数
1
解决办法
1740
查看次数

.Net 4 - 在程序集中包含自定义信息

我正在构建一个可扩展的应用程序,它将在运行时加载其他程序集Assembly.LoadFile().这些附加程序集将包含诸如WPF资源字典(皮肤等),普通资源(Resx)和/或插件类之类的东西.程序集也可以不包含公共类,只包含资源或资源字典.

我正在寻找一种识别程序集的方法,比如友好名称(如"附加外观"或"集成浏览器"),程序集的功能类型(SkinsLibrary,SkinsLibrary | PluginLibrary等)和其他信息(如ConflictsWith(new [] {"SkinsLibrary","BrowserPlugin").

到目前为止,我在命名程序集(*.Skins.*.dll等等)中使用约定.在每个程序集中,我有一个空的虚拟类,它只是一个占位符,用于保存实际(程序集范围)信息的自定义类属性,但这感觉就像一个黑客.是否有一些简化的标准方法来处理这个问题?

我正在开发中央加载器系统,我团队中的其他开发人员将开发这些额外的程序集,所以我想最小化约定和管道细节.

.net c# assemblies

5
推荐指数
1
解决办法
3104
查看次数

托管在.Net4 app中的.Net2程序集在x86中的表现比在AnyCpu模式下表现更好?

我有一个.Net4 WinForms应用程序引用第三方.Net2程序集,其中包含图形密集的可视控件.当我意外地将它从AnyCpu切换到x86编译模式时,我注意到应用程序的视觉性能有了很大的提高.我的开发工具是x64 Windows 7.当控件渲染其图形元素时,改进至少为两倍.

这是一个众所周知的事实还是我做错了什么?

.net performance x86 winforms anycpu

5
推荐指数
1
解决办法
886
查看次数

获取类型数组的记录字段的长度

我正在编写一个与外部二进制API进行通信的包装器.API使用PDU(打包二进制记录)进行通信.字符串是AnsiChar的数组,并且是零终止的:

type 
  TSomePDU = packed record
    //...
    StringField: array[0..XYZ] of AnsiChar;
    //...
  end;
  PSomePDU = ^TSomePDU;
Run Code Online (Sandbox Code Playgroud)

我想编写一个接受String并填充char数组的FillPDUString过程,但我想避免在使用过程的任何地方跟踪MaxLength,所以我需要以某种方式获得声明的数组大小给定指向该字段的指针:

function GetMaxSize(const Field: array of AnsiChar): Integer;
begin
  // ???
end;

//...
GetMaxSize(ARecord.StringField);
Run Code Online (Sandbox Code Playgroud)

这可能吗?

delphi

4
推荐指数
2
解决办法
1514
查看次数

将一个CSS类添加到razor @ Html.DisplayFor

我想为我的代码部分设置一个新类,但它无法正常工作

@Html.DisplayFor(model => model.melk.Code, new { @class = "myClass" } )
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我错在哪里?

css razor asp.net-mvc-3

4
推荐指数
1
解决办法
1万
查看次数

获取持久性上下文中的托管实体实例列表

有没有办法在JPA/Hibernate 4.x中获取给定Session/EntityManager的"已知"实体实例列表?

"已知"是指加载,创建或更改,即存在于持久性上下文中的托管实体.我知道EntityManager#contains方法,所以我猜这样的列表维护的,但我怎么能达到它?

编辑:另外,我如何查询持久化实体的状态(检查它是否在此持久化上下文中创建,更新,删除或清除)?

hibernate jpa hibernate-4.x

4
推荐指数
1
解决办法
4164
查看次数

有没有办法在 .cshtml 文件中显示行号?

我正在使用 VS2012 Ultimate,并且已经从文本编辑器中单击了“显示行号”选项。VS2012 显示模型和控制器中的行号。

我知道有一种方法可以使用记事本++或浏览器的源代码显示行号。但是复制、粘贴和搜索行号过程会浪费时间,而且你也不能执行“转到定义”、“查看定义”等命令。

由于这些原因,我想在 .cshtml 文件中显示行号

asp.net-mvc numbers line razor

4
推荐指数
1
解决办法
4608
查看次数

C# - EF4 - 获取服务器的DateTime.Now

我有一个胖客户端应用程序,它在数据层中使用EF4到MSSQL.在使用EF4之前(在普通的ADO.Net中)我曾经有一个包装器函数来获取SQL服务器的DateTime.Now(一个简单的SELECT GETDATE()包装在C#客户端调用中).

现在我发现在EF4中使用返回简单值类型的SQL函数和SP并不那么简单.在这种情况下,获取服务器日期时间的最简单,最有效的方法是什么?

如果可能的话,我想避免为此创建一个包装器实体.

c# sql-server entity-framework

3
推荐指数
1
解决办法
1342
查看次数

.Net - 转换或转换盒装字节?,简称?还是int?到int?

如果我有一个object引用a 的引用byte?,short?或者int?有没有办法无条件地将该对象引用转换为int?没有为每个案例编写单独的代码?

例如:

byte? aByte = 42; // .. or aByte = null
object anObject = aByte;
//...
var anInt = (int?)anObject //As expected, doesn't work
Run Code Online (Sandbox Code Playgroud)

.net c# int casting nullable

1
推荐指数
1
解决办法
2172
查看次数

.NET4 WPF - Foreground的样式设置器仅在控制隐藏/显示后工作

我有一个叫WPF某一个风格问题HeadTextTargetType = "TextBlock".样式定义Foreground,FontSizeEffect.第一次显示TextBlock时,不会触发前景设置器(文本颜色保持黑色),正常应用FontSize和Effect.当我从父项中删除TextBlock并将其返回时,前景也会按原样更改.

情况:

Presenter.dll程序集

  • class Presenter: Window,加载并显示我的usercontrols.
  • Generic.xaml - 包含样式的资源字典.
  • Presenter.dll不直接参考TestPresentable.dll.

TestPresentable.dll程序集

  • TestPresentable: UserControl,有一个风格TextBlock.
  • TestPresentable.dll不直接参考Presenter.dll.

MainApp.exe

  • 引用前两个程序集,
  • MainWindowPresenter.dll汇编中实例化,
  • TestPresentableTestPresentable汇编中实例化,
  • MainWindow.ContentHost.Content = testPresentable

相关代码:

Presenter.dll

// Themes/Generic.xaml
...
<Style TargetType="{x:Type TextBlock}" x:Key="HeadText">
    <Setter Property="Foreground" Value="#FFFFFFFF" />
    <Setter Property="Effect">
        <Setter.Value>
            <DropShadowEffect ShadowDepth="0" Color="#79000000" BlurRadius="3" Opacity="1" />
        </Setter.Value>
    </Setter>
    <Setter Property="FontSize" Value="24"/>
</Style>
...


// …
Run Code Online (Sandbox Code Playgroud)

wpf styles .net-4.0 foreground

0
推荐指数
1
解决办法
2383
查看次数