1

我在 ABBYY Flexicapture 中工作,它允许用 C#.NET 编写一些脚本,我从来没有使用过 C#.NET,但它与 Java 已经足够接近了。我有一个method声明,显示以下内容:

Document:
    Property (name: string) : VARIANT
        Description: Retrieves the value of a specified property by its name. The returned value can be in the form of a string, a number or time.
        Properties names and returned values: 
            Exported - when the document was exported 
            ExportedBy - who exported the document 
            Created - when the document was created 
            CreatedBy - who created the document 

因此,我试图获取“导出者”值,但是当我尝试以下任何行时,我会收到错误:

string = Document.Property("CreatedBy"); // Returns Error: Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?) (line 95, pos 21)
string = Document.Property(CreatedBy);  // Returns Error: Error: The name 'CreatedBy' does not exist in the current context (line 95, pos 39)
string = Document.Property("CreatedBy").Text; //Error: 'object' does not contain a definition for 'Text' (line 95, pos 52

我以前从未见过VARIANT使用过的,有人可以向我解释一下。我缺少明显的语法错误吗?

4

2 回答 2

2

我对 ABBYY Flexicapture 不熟悉,但我以前做过一些 COM,并且大量使用了 VARIANT。它基本上是一个值类型,可以是字符串、数字或日期。

这似乎与您引用的声明中给出的描述一致:

返回值可以是字符串、数字或时间的形式。

VARIANT 类似于 javascript 等弱类型(脚本)语言中的变量。

有关更多详细信息,请查看维基百科

于 2012-07-03T15:43:58.693 回答
1

Variant 实际上是不同类型的“联合”。一个很好的表达方式就是

object o = Document.Property("CreatedBy");

您现在可以检查的确切类型o

if (o is string)
{
    string s = (string)o;
    // work with string s
}
else if (o is int)
{
    int i = (int)o;
    // work with int i
}
// etc. for all possible actual types

或者,您可以将对象转换为字符串表示 ( o.ToString()) 并使用它。

于 2012-07-03T17:29:02.113 回答