C# 转换对象上的vb.net静态方法调用
我在将vb.net转换为c#.net时遇到了更多问题 我在vb.net中有一些文件带有“Option Strict Off”以允许糟糕的编程。当我转换为c#时,我使用“动态”直到我回来解决问题,这在所有情况下都有效 但现在我有了这个代码:C# 转换对象上的vb.net静态方法调用,c#,vb.net,C#,Vb.net,我在将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 并且
Public Class ContractResults
'Big class definition
Public Shared Sub CleanCache()
'Code here
End Sub
End Class
并且在选项严格关闭的文件中:
Public Sub VerifyResults(result as Object)
'Here, result is normally ContractResults
'first it check for that then call this:
result.CleanCache()
End Sub
在c#中,我使用“dynamic”,但当我使用动态引用调用“static”方法时,会弹出一个运行时错误。在vb.net中,我可以从实例中调用“shared”sub,但在c#中,这是不允许的
例外情况:
“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”
“无法使用实例引用访问成员'ContractTypes.ContractResults.CleanCache()';请改为使用类型名称限定它”
似乎我必须转换代码以使用实际类型,但这意味着要重写更多的部分。有人能用另一种方式展示吗
我想确定你不认为我能用
(result as ContractResults).CleanCache();
因为所有可能传入的类型都有“CleanCache()”方法,但不从“Object”以外的任何相同对象继承。有许多类型(30!)具有此“静态”方法,因此它使用Option Strict Off,正如错误所示,您必须从类中调用静态方法,而不是实例:
ContractResults.CleanCache();
您可以将30个类型放入switch语句中,但这会很糟糕。正如错误所示,您必须从类中调用静态方法,而不是从实例中调用:
ContractResults.CleanCache();
您可以将30种类型放入switch语句中,但这会很难看。您可以使用:
(未经测试)您可以使用:
(未经测试)我很抱歉这么说,但最初关闭Option Strict的决定是一个糟糕的决定。不知何故,我怀疑最初编写的代码是否与您认为的一样
是时候继续解决这个问题了。我很抱歉这么说,但最初关闭Option Strict的决定是一个糟糕的决定。不知何故,我怀疑最初编写的代码是否与您认为的一样
是时候继续解决这个问题了。对于30种类型,我只需打开Option Strict并在VB中解决它。IDE会为每种类型提供警告,您应该能够非常快速地完成所有操作。对于30种类型,我只需打开Option Strict并在VB中修复它。IDE会给你每一个警告,你应该能够很快地完成所有的事情。在这个循环中运行的一个问题似乎是代码的速度变慢了,但我喜欢转换——在我看来,转换坏代码会变成转换坏代码。我会投赞成票,但我不是足够好的用户。我投赞成票是因为这足以让OP继续工作。这项工作:我必须添加“BindingFlags.InvokeMember”。在这个循环中运行的一个问题似乎是代码的速度变慢了,但我喜欢转换——在我看来,转换坏代码会变成转换坏代码。我会投赞成票,但我不是足够好的用户。投赞成票是因为这足以让OP继续工作。我也这么认为,但转换计划不会因为修复旧的坏代码而增加。我仍然会投票支持你(但我不是一个足够好的用户)。我也这么认为,但转换时间表不会因为修复旧的坏代码而增加。尽管如此,我还是会投票支持你(但我的用户还不够好)。