C#函数返回不同的类型。如何声明返回值?评估返回值?

C#函数返回不同的类型。如何声明返回值?评估返回值?,c#,excel,C#,Excel,我正在编写一个VSTO,是C#的新手,在声明和计算返回值时遇到了问题。此函数返回Excel.Range或bool。如果是bool,我什么都不想做;如果是Excel.Range,我什么都不想做 [SomeType] range = Globals.ThisAddIn.Application.InputBox(Prompt: Prompt,Title: Title, Type: 8); if ([SomeConditionStatement]) { doSomething(); } In

我正在编写一个VSTO,是C#的新手,在声明和计算返回值时遇到了问题。此函数返回Excel.Range或bool。如果是bool,我什么都不想做;如果是Excel.Range,我什么都不想做

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

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

InputBox
的返回类型是
object
。您可以使用
var
,然后将其实际类型与匹配

请注意,根据,当类型参数为8时,
InputBox
将只返回
范围

如果类型为8,InputBox将返回一个范围对象


我发现按预期使用
而不是键入
,并检查
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;

关于如何检查对象是否为给定类型,您做了哪些研究,以及将您发现的应用于您的情况时遇到了哪些问题?是,GetType(),typeof,但如果我得到的是另一种类型,而不是检查的
if(range是Excel.range)
,则它们都会失败?可能您的
输入框
返回
对象
?@bravogolfgolf然后显示您正在使用的代码,并具体解释您在使用它们时遇到的问题。我观察到类型8的输入框有两个按钮:确定和取消。如果输入范围,则“确定”返回范围。如果单击确定时没有范围,则显示错误。如果单击“取消”,则返回false。此函数在上记录一次,在中记录第二次。office dev one比我之前链接的office dev one要好得多,它甚至解释说取消总是导致
false
,就像您观察到的>更新链接一样
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;