【问题标题】:How to port C# code which uses a callback to VB.NET?如何将使用回调的 C# 代码移植到 VB.NET?
【发布时间】:2010-03-25 15:43:03
【问题描述】:

我需要将 ASP.NET MVC 2 sourcecode 中的以下内容从 C# 移植到 VB.NET。它来自 AuthorizeAttribute.cs 从第 86 行开始:

HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge(new TimeSpan(0));
cachePolicy.AddValidationCallback(CacheValidateHandler, null /* data */);

其中 CacheValidateHandler 是:

private void CacheValidateHandler(HttpContext context, object data, 
                                  ref HttpValidationStatus validationStatus) {
     validationStatus = OnCacheAuthorization(new HttpContextWrapper(context));
}

http://converter.telerik.com 的 VB.NET 端口不适用于这一行:

cachePolicy.AddValidationCallback(CacheValidateHandler, Nothing) ' Error

其中 CacheValidateHandler 是:

Private Sub CacheValidateHandler(ByVal context As HttpContext, ByVal data As Object, _
                                 ByRef validationStatus As HttpValidationStatus)
    validationStatus = OnCacheAuthorization(New HttpContextWrapper(context))
End Sub

VS2008 抱怨 CacheValidateHandler 没有为 contextdatavalidationStatus 指定其参数。 p>

任何想法如何移植此代码?

【问题讨论】:

标签: c# vb.net


【解决方案1】:

要在 VB.NET 中将函数作为参数传递,您必须使用 AddressOf 关键字:

cachePolicy.AddValidationCallback(AddressOf CacheValidateHandler, Nothing)

【讨论】:

  • 谢谢。就是这样。你的答案比下一个答案早 5 秒,所以我会给你绿色检查。
  • 我不知道为什么 Telerik 转换器没有插入那个。我猜译者并不完美。
  • @Bob :实际上,他比我快 55 秒。我最近也使用了 Telerik 转换器。我不认为它实际上会查找您的函数(如果函数位于不同的文件中,通常它不能)。此外,当从 VB.NET 转换为 C# 时,它会将索引属性错误地转换为 array(0) 而不是 array[0]。
【解决方案2】:

我认为你需要使用AddressOf:

cachePolicy.AddValidationCallback(AddressOf CacheValidateHandler, Nothing)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2010-10-17
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多