簡體   English   中英

vb.NET到C#的轉換錯誤:無法將類型'object'隱式轉換為'MyCustomObject'

[英]vb.NET to C# conversion error: Cannot implicitly convert type 'object' to 'MyCustomObject' An explicit conversion exists

我正在嘗試將在網上找到的某些VB.net代碼轉換為一些C#代碼,但是在我的C#代碼中,此行代碼出現以下錯誤:


DNNServiceSecurityToken token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());

具體的錯誤代碼為:

無法將類型'object'隱式轉換為'MyTypes.DNNServiceSecurityToken'。 存在顯式轉換(您是否缺少演員表?)



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ServiceModel.Dispatcher;
    using DotNetNuke.Common.Utilities;
    using DotNetNuke.Entities.Users;
    using MyTypes;

        public class SecurityTokenInspector : IParameterInspector
        {
            public string Roles;

            public SecurityTokenInspector(string value)
            {
                Roles = value;
            }

            public object BeforeCall(string operationName, object[] inputs)
            {

                // token will always be the last parameter 
                int index = inputs.Length - 1;
                string TokenId = inputs[index].ToString();

                // ********** ERROR LINE BELOW HERE *********** //
                // THE ERROR IS HAPPENING WITH THIS LINE:       //
                // ******  first make sure token exists  ****** //
                DNNServiceSecurityToken token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());
                if (token == null)
                {
                    throw new Exception("Security Token Expired. Please request a new Token");
                }

                // if token exists, check user roles 
                UserInfo user = UserController.GetUserById(0, token.UserID);
                if (!(user.IsInRole(Roles)))
                {
                    throw new Exception("Access Denied. Role Membership Requirements not met");
                    return null;
                }

                return null;

            }

            public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
            {
                return;
            }

        }

Imports System 
 Imports System.ServiceModel.Dispatcher 
 Imports DotNetNuke.Common.Utilities 
 Imports DotNetNuke.Entities.Users 

 Public Class SecurityTokenInspector 
    Implements IParameterInspector 

    Public Roles As String 

    Public Sub New(ByVal value As String) 
       Roles = value 
    End Sub 

    Public Function BeforeCall(ByVal operationName As String, _ 
       ByVal inputs() As Object) As Object _ 
       Implements IParameterInspector.BeforeCall 

       ' token will always be the last parameter 
       Dim index As Integer = inputs.Length - 1 
       Dim TokenId As String = inputs(index).ToString() 

       ' first make sure token exists 
       Dim token As DNNServiceSecurityToken = 
          _DataCache.GetCache("DNNSecurityToken_" & TokenId) 
       If token Is Nothing Then 
          Throw New Exception( _ 
          "Security Token Expired. Please request a new Token") 
       End If 

       ' if token exists, check user roles 
       Dim user As UserInfo = UserController.GetUserById(0, token.UserID) 
       If Not user.IsInRole(Roles) Then 
          Throw New Exception( _ 
          "Access Denied. Role Membership Requirements not met") 
          Return Nothing 
       End If 

        Return Nothing 

    End Function 

    Public Sub AfterCall(ByVal operationName As String, _ 
       ByVal outputs() As Object, ByVal returnValue As Object, _ 
       ByVal correlationState As Object) _ 
       Implements IParameterInspector.AfterCall 
       Return 
    End Sub 

 End Class 

您需要將返回對象強制轉換為變量的對象類型:

DNNServiceSecurityToken token = (DNNServiceSecurityToken) DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());

根據錯誤提示嘗試投射它:

DNNServiceSecurityToken token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString()) as DNNServiceSecurityToken;

您是否真的需要將該令牌作為DNNServiceSecurityToken? 還是GetCache返回的類型也能正常工作?

嘗試這個:

var token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM