【发布时间】:2010-11-30 19:14:49
【问题描述】:
我在将 vb.net 转换为 c#.net 时遇到了更多问题。
我在 vb.net 中有一些文件具有“Option Strict Off”以允许不良编程。当我转换为 c# 时,我使用“动态”,直到我回来解决问题,这适用于所有情况
但现在我有这个代码:
Public Class ContractResults
'Big class definition
Public Shared Sub CleanCache()
'Code here
End Sub
End Class
并且在 Option Strict Off 的文件中:
Public Sub VerifyResults(result as Object)
'Here, result is normally ContractResults
'first it check for that then call this:
result.CleanCache()
End Sub
在 c# 中我使用“动态”,但是当我使用动态引用调用“静态”方法时会弹出运行时错误。在 vb.net 中,我可以从实例中调用“共享”子,但在 c# 中这是不允许的
例外: “Microsoft.CSharp.RuntimeBinder.RuntimeBinderException” "不能使用实例引用访问成员 'ContractTypes.ContractResults.CleanCache()';改为使用类型名称对其进行限定"
看来我必须将代码转换为使用实际类型,但这意味着要重写更多部分。有没有人可以展示另一种方式?
我想确保你不认为我可以使用
(result as ContractResults).CleanCache();
因为所有可能传入的类型都有“CleanCache()”方法,但不继承自“Object”以外的任何相同的东西。有许多类型(30 种!)具有这种“静态”方法,这就是它使用 Option Strict Off 的原因
【问题讨论】:
-
对于 30 种类型,我只需打开 Option Strict On 并在 VB 中修复它。 IDE 将为您提供每个警告,您应该能够非常快速地完成所有操作。