【发布时间】:2016-12-29 00:05:03
【问题描述】:
我正在将一个 c# 项目转换为 delphi XE5,但我被困在一个(我相信)简单的任务上。
public void TransferFile(object o, Stream stream)
{
string s = o as string;
if (s != null)
{ do something }
else { do something else }
}
其中 o 包含一个对象的句柄(在这种情况下,它的值为 689520929)并且转换为字符串报告 null,这是预期的结果。
我用delphi翻译了如下:
procedure TransferFile(o: OleVariant; stream: TFileStream);
var
s: string;
begin
s:= IntToStr(o);
if (s <> '') then do something
else do something else
end;
在这种情况下,将变体转换为字符串会报告数字表示 (689520929),这会导致程序流产生不同的行为。
帮助表示赞赏:)
【问题讨论】:
-
使用
VarType检测变量中保存的类型 -
是的,这没有多大意义。 C# 代码中没有整数到字符串的转换,因此 Delphi 代码中不应该有整数到字符串的转换。但是很难说首先将
object转换为OleVariant是否是最好的方法,因为没有迹象表明谁调用了该过程,允许哪些类型,以及该过程对它还有什么作用。 -
使用 TFileStream 也很奇怪。为什么要限制自己的文件?这样做没有任何好处。但是没有任何背景,很难给你好的建议。代码永远不会完全孤立地翻译。
-
Olevariant 是我实际得到的对象数据类型的最佳表示。
-
Olevariant 实际上是我在 delphi 中获得的对象数据类型的最佳表示。顺便说一句,Vartype 总是会带来存储在变体中的数字表示,因此字符串总是不同于 ''
标签: c# delphi object types casting