2017-03-15 90 views
-1

我正在写一个VSTO,C#新手,并且有一个声明和评估返回值的问题。这个函数返回一个Excel.Range或者bool。如果它是bool,我不想做任何事,如果它是Excel.Range,我也不想做doSomething()。C#函数返回不同的类型。我如何声明返回值?评估回报值?

[SomeType] range = Globals.ThisAddIn.Application.InputBox(Prompt: Prompt,Title: Title, Type: 8); 

if ([SomeConditionStatement]) { 
    doSomething(); } 
+3

你如何检查是否一个对象做什么研究是一种特定的类型,你有什么问题适用于你发现的情况? – Servy

+0

是,GetType(),typeof,但它们都会失败,并发生异常,如果我得到的另一种类型比我检查 – bravogolfgolf

+1

'if(range is Excel.Range)'?可能你的'InputBox'返回'object'? –

回答

0

返回类型InputBoxobject。您可以用var来调整它,然后将其实际类型与is keyword匹配。

var range = Globals.ThisAddIn.Application.InputBox(Prompt: Prompt, Title: Title, Type: 8); 

if (range is Excel.Range) 
{ 
    doSomething(); 
} 

注意的是,根据documentationInputBox不会返回任何东西,但Range,当Type参数为8:

如果数据类型为8的InputBox返回一个Range对象。

+0

我观察到的是Type 8的InputBox有两个按钮:OK和Cancel。如果输入范围,则OK返回范围。如果单击确定没有范围它会显示一个错误。如果单击取消,则返回false。 – bravogolfgolf

+0

该函数一旦记录在[MSDN办公dev的中心(https://msdn.microsoft.com/en-us/library/office/ff839468.aspx),并且在[MSDN互操作文档]的第二时间(HTTPS ://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._application.inputbox.aspx)。办公室的开发人员比我之前链接的人员要好得多,它甚至解释说,取消总是会导致“错误”,就像你观察到的那样>更新了链接 – dlatikay

0

我觉得它更多的方便使用as expectedType代替,检查null

Range range = Application.InputBox(Prompt, Title, Type: 8) as Range; 

if (range != null) 
{ 
    object[,] values = range.Value2 as object[,]; 
} 

其他例子:

var s = range.Text as string; 

var c = range.Cells[1] as Range; 

var w = Application.Worksheets["Sheet1"] as Worksheet; 

var d = Application.Evaluate("COUNTA(A1:A9)") as double? ?? -1;