我想恳请有关在C#中的良好的编程习惯你的建议,当谈到定义变量,为他们分配空间,初始化它们,然后经过清理妥善清理一切。变量声明,初始化和unamanaged内存分配
我面对的时刻的问题是,我有,它使用非托管API函数,其结果也不受管理的访问存储器(用于封送)的功能。我希望在退出之前使该功能保持清洁并妥善处理所有内容。事情是,所有的实际工作都在try-catch块内完成。这意味着我无法清理中的所有内容或终于区块。
我所做的就是声明的所有变量,保留存储器他们在最后块进入的功能,然后干净的一切行动(靠近手柄,释放内存,...)之后初始化它们。
都好,但我也想有变量声明,初始化和内存分配在做过尝试块(东西初始化例如数组或内存中分配空间时,也可能会出错或上帝知道在哪里)。唯一想到的是嵌套两个try-catch块。这是好的还是你会提出其他建议?
这是我到目前为止有:
//Declare variables, allocate memory, initialize variables.
........
try
{
//Do actual work - write to file and read from a file in my case
.........
}
catch (Exception exc)
{
//Exception handler for file write/read errors
}
finally
{
//Clean up (release handles, free memory,...)
}
而且这里是我的想法:
try
{
//Declare variables, allocate memory, initialize variables.
........
try
{
//Do actual work - write to file and read from a file in my case
.........
}
catch (Exception exc)
{
//Exception handler for file write/read errors
}
}
catch (Exception exc_1)
{
//Exception handler for variable declaration, initialization, memory allocation errors
}
finally
{
//Clean up (release handles, free memory,...)
}
预先感谢您的帮助!
干杯!
这对我来说不行,我想。我想在最外面尝试的一些例子: 'NativeOverlapped HidOverlapped = new NativeOverlapped();' 'IntPtr eventObject = CreateEvent(IntPtr.Zero,false,false,“”);' 'IntPtr nonManagedOverlapped = Marshal.AllocHGlobal(Marshal.SizeOf(HidOverlapped));' 'Marshal.StructureToPtr(HidOverlapped,nonManagedOverlapped,false);' 我也正在初始化我的数组元素之一。为了安全起见,我还必须假设在执行此操作时可能发生错误(例如IndexOutOfBounds异常)。 有什么想法? – EEALNT
如何使用单独的函数来完成工作(读取和写入文件)?这样这个新函数将有它自己的try和catch块。 但是,如果抛出异常并由被调用函数中的catch块处理,程序是否会返回调用者函数? – EEALNT
1你可以使用2 set使用block设置你的nonManagedOverlapped来添加try catch,这很好 –