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