Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换对象上的vb.net静态方法调用_C#_Vb.net - Fatal编程技术网

C# 转换对象上的vb.net静态方法调用

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 并且

我在将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 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继续工作。我也这么认为,但转换计划不会因为修复旧的坏代码而增加。我仍然会投票支持你(但我不是一个足够好的用户)。我也这么认为,但转换时间表不会因为修复旧的坏代码而增加。尽管如此,我还是会投票支持你(但我的用户还不够好)。