gpt4 book ai didi

c# 在 Try..Catch 之后使用未分配的局部变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:49 25 4
gpt4 key购买 nike

我正在使用下面的代码来获取 MS Word 的运行实例。

我现在遇到“使用未分配的局部变量“oWord””的编译问题

这是我的代码:

Microsoft.Office.Interop.Word._Application oWord ; 

try
{
// Is Word running?
oWord = Marshal.GetActiveObject("Word.Application") as Microsoft.Office.Interop.Word.Application; // ApplicationClass;
}
catch (COMException ce)
{
if (ce.ErrorCode == unchecked((int)0x800401E3))
// No, Word not in ROT, start a new instance
oWord = new Microsoft.Office.Interop.Word.Application();
}
// Use instance referened by _WordApp

oWord.ScreenUpdating = false; // < PROBLEM HERE

object objDefaultBehaviorWord8 = WdDefaultTableBehavior.wdWord8TableBehavior;
object objAutoFitFixed = WdAutoFitBehavior.wdAutoFitFixed;

//MAKING THE APPLICATION VISIBLE
oWord.Visible = Properties.Settings.Default.DebugMode;
oWord.DisplayAlerts = WdAlertLevel.wdAlertsNone;

但在我看来 oWord 已分配,我猜测编译器正在查看我的 Try..Catch block 并说我已取消分配 oWord

那么分配这个的正确方法是什么?

最佳答案

如果 Marshal.GetActiveObject 调用失败,它可能永远不会被分配,但错误代码不是 unchecked((int)0x800401E3)

您需要在首次声明时将 oWord 设置为某些内容:

Microsoft.Office.Interop.Word._Application oWord = null;

Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();

我可能会选择后者。这也消除了进一步进行空检查的需要,现在你真的应该这样做,因为如果在 try/catch block 中捕获到异常,你并没有完全中止。

(话虽如此,如果这样做实际上会启动 Word(如果它尚未运行),请使用第一个选项,然后确保 oWord 不是仍然 null在 try/catch 之后。)

关于c# 在 Try..Catch 之后使用未分配的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24497674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com