Как я могу исправить этот короткий фрагмент VB, который был переведен с C #? - PullRequest
0 голосов
/ 02 февраля 2012

Мне дали этот фрагмент C #, который отлично работает в Visual Studio 2010:

using System;использование System.Web.UI.WebControls;

public partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
}

protected void RequestLanguageChange_Click(object sender, EventArgs e)
{
    LinkButton senderLink = (LinkButton)sender;
    Response.Redirect(Request.RawUrl.ApplyCultureToUrl(senderLink.CommandArgument));
}
}

И каждый онлайн-конвертер (и SharpDevelop) переводит его в VB:

Imports System
Imports System.Web.UI.WebControls

Public Partial Class MasterPage
Inherits System.Web.UI.MasterPage
Protected Sub Page_Load(sender As Object, e As EventArgs)
End Sub

Protected Sub RequestLanguageChange_Click(sender As Object, e As EventArgs)
Dim senderLink As LinkButton = DirectCast(sender, LinkButton)

Response.Redirect(Request.RawUrl.ApplyCultureToUrl(senderLink.CommandArgument))
End Sub
End Class

VS также делает то же самое с этим:

Public NotInheritable Class Localization
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension()> _
Public Shared Function ApplyCultureToUrl(rawUrl As String, culture As String) As String
Dim modifiedUrl As String

Говоря System.Runtime.CompilerServices.Extension можно запускать только в модулях.

Проблема:

В Visual Studio 2010 Request.RawUrl.ApplyCultureToUrl подчеркнут синим цветом и не предлагает решения.Он просто говорит ApplyCultureToUrl не является членом 'String' .Это единственное, что мешает моему решению работать!

Я исследовал на MSDN, и он говорит, что ошибка означает, что он должен быть окружен модулем, но не быть кодером, я понятия не имею, как исправитьЭто.Фрагмент должен помочь моей строке запроса? Lang = en-GB показать на моем многоязычном веб-сайте.Любая помощь будет искренне признательна!


Обновление: у меня работает приложение ApplyCulturetoUrl, просто нажимая много значков в Visual Studio, и оно выдает это:

Partial Public Class MasterPage
Inherits System.Web.UI.MasterPage
Protected Sub Page_Load(sender As Object, e As EventArgs)
End Sub

Protected Sub RequestLanguageChange_Click(sender As Object, e As EventArgs)
    Dim senderLink As LinkButton = DirectCast(sender, LinkButton)
    Response.Redirect(ApplyCultureToUrl(Request.RawUrl, senderLink.CommandArgument))
End Sub

Private Sub body()
    Throw New NotImplementedException
End Sub

Private Function ApplyCultureToUrl(p1 As String, p2 As String) As String
    Throw New NotImplementedException
End Function
End Class

И это не дает мне ошибок, хотя я не знаю, правильно ли это ... хе-хе .... Теперь, единственная другая часть кода, которая дает мне ошибку, находится в localization.vb, классе, и этокак это:

Public NotInheritable Class Localization
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension()> _
Public Shared Function ApplyCultureToUrl(rawUrl As String, culture As String) As String
 Dim modifiedUrl As String

И System.Runtime.CompilerServices.Extension () подчеркнут волнистым синим цветом и говорит, что методы расширения могут быть определены только в модулях.Я использую все ваши предложения!Спасибо, что придерживаетесь этого!

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Похоже, ApplyCultureToUrl - это метод расширения.

Решить это можно так же просто, как импортировать пространство имен, в котором определено ApplyCultureToUrl.

Однако это может быть сложнее, чем это:

В расширениях VB.Net методы должны быть в модуле, это должно быть публично, чтобы ссылаться на расширение из других проектов. Чтобы включить их, вам нужно просто сослаться на содержащую сборку и импортировать правильное пространство имен.

Страница MSDN для методов расширения VB.Net: здесь .

1 голос
/ 02 февраля 2012

Поместите курсор на ключевое слово ApplyCultureToUrl в файле C # и нажмите кнопку F12.Этот метод определен как метод расширения где-то.

Я не знаю, поддерживает ли Visual Basic методы расширения, если нет, вы можете определить его в VB локально:

Private Function ApplyCultureToUrl(RawUrl as String, Command as String) As String
   // body
End Function

В этом случаеВы будете называть это следующим образом:

Response.Redirect(ApplyCultureToUrl(Request.RawUrl, senderLink.CommandArgument))
...