VARIANT这个术语在方法定义中意味着什么?

时间:2012-07-03 15:38:59

标签: c#

我正在使用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,有人可以向我解释。是否有明显的语法错误?

2 个答案:

答案 0 :(得分:2)

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

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

  

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

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

有关详细信息,请查看Wikipedia

答案 1 :(得分: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())并使用它。