''不包含'Session'的定义,也没有扩展方法''接受'object'类型的第一个参数

时间:2014-02-13 01:48:49

标签: c# vb.net-to-c#

我正在使用VB.net进行C#项目转换。我收到错误,任何解决方案?

1 - 'object'不包含'Session'的定义,也没有扩展方法'Session'可以找到'object'类型的第一个参数(你是否缺少using指令或汇编引用?) 2 - 'object'不包含'Request'的定义,也没有扩展方法'Session'接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)

我正在使用在线免费转换工具;我转换的代码如下。

public bool DisplayMessageWindow(ref object Caller, string MessageToDisplay)
{
    bool functionReturnValue = false;
    long P = 0;

    functionReturnValue = false;

    if (IsCalledByMessageURL(ref Caller)) {
        return functionReturnValue;
    }

    LogMessage("Displaying Message Window (Called From): " + Caller.Request.RequestUrl.ToString());


    LogMessage("                    Message To Display : " + MessageToDisplay, false);

    Caller.Session["MessageToDisplay"] = MessageToDisplay;

    Caller.Session["RedirectURL"] = Caller.Request.Url.ToString();
    PriorURL = Caller.Session["RedirectURL"];
    SetRedirectURL(ref Caller);

    LogMessage("Modified Redirect URL to : " + Caller.Session["RedirectURL"]);

    if ((Caller.Request.Form("partssn") != null)) {
        Caller.Session["SRTSessionId"] = Caller.Request.Form("SRTSessionId");
        Caller.Session["partssn"] = Caller.Request.Form("partssn");
        Caller.Session["erid"] = Caller.Request.Form("erid");
    } else {
        Caller.Session["SessionID"] = Session.SessionID.ToString();
        Caller.Session["partssn"] = Caller.Request.Form("txtUserName");
        //Caller.Session["partssn"] = Session["loginUser"]
    }

    LogMessage("Redirect To: " + Caller.Session["RedirectURL"]);
    functionReturnValue = true;
    return functionReturnValue;
    //Caller.Response.Redirect("LoadPartData.aspx")
}

我的vb.net代码是

Function DisplayMessageWindow(ByRef Caller As Object, ByVal MessageToDisplay As String) As Boolean
    Dim P As Long

    DisplayMessageWindow = False

    If IsCalledByMessageURL(Caller) Then
        Exit Function
    End If

    LogMessage("Displaying Message Window (Called From): " + Caller.Request.Url.ToString)
    LogMessage("                    Message To Display : " + MessageToDisplay)

    Caller.Session("MessageToDisplay") = MessageToDisplay

    Caller.Session("RedirectURL") = Caller.Request.Url.ToString
    PriorURL = Caller.Session("RedirectURL")
    SetRedirectURL(Caller)

    LogMessage("Modified Redirect URL to : " + Caller.Session("RedirectURL"))

    If Not (Caller.Request.Form("partssn") Is Nothing) Then
        Caller.Session("SRTSessionId") = Caller.Request.Form("SRTSessionId")
        Caller.Session("partssn") = Caller.Request.Form("partssn")
        Caller.Session("erid") = Caller.Request.Form("erid")
    Else
        Caller.Session("SessionID") = Session.SessionID.ToString()
        Caller.Session("partssn") = Caller.Request.Form("txtUserName")
        'Caller.Session("partssn") = Session("loginUser")
    End If

    LogMessage("Redirect To: " + Caller.Session("RedirectURL"))
    DisplayMessageWindow = True
    'Caller.Response.Redirect("LoadPartData.aspx")
End Function

2 个答案:

答案 0 :(得分:0)

如果Caller参数在VB代码中也是Object类型,VB代码依赖于后期绑定,这使得VB代码变坏。您应该在VB中使用Option Strict On,以便代码也无法在那里编译。如果该参数将是特定类型,则在VB代码和C#代码中将其声明为该类型。

另外,为什么通过引用传递?你在哪里为方法中的那个参数分配任何东西?我无处可见,所以没有理由通过引用传递它,即通过值传递它。同样,这适用于VB以及C#。

答案 1 :(得分:0)

@jmcilhinney在两个方面都是正确的:Option Strict是一个好主意,并且没有理由通过ByRef参数传递。但是,考虑到此代码的一般状态以及原始作者似乎喜欢无偿的后期绑定这一事实,转移到Option Strict可能会像圣诞树一样点亮您的编译器。

因此,如果您只是尝试通过此端口,可以尝试将呼叫者声明为dynamic而不是object。这将是如何在VB中传递参数的准确翻译。