无法将'System.Object []'转换为'System.String []'类型

时间:2012-04-23 20:34:40

标签: c# c#-4.0 .net

您是否有另一个想法来获取此数据列表?

我想展示我的所有代码,因为我觉得这对你来说更容易。在此代码中,您可以看到我如何连接角色文件。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Interop.Security.AzRoles;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Collections.Generic;




namespace Authman
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {   
            // See the following table for other sample connection strings.
            string connectionString = @"msxml://c:\plik.xml";

            AzAuthorizationStoreClass azStore = new AzAuthorizationStoreClass();
            azStore.Initialize(0, connectionString, null);

            IAzApplication2 azApplication = azStore.OpenApplication2("SatheeshApp", null);

            IAzClientContext3 clientContext = (IAzClientContext3)azApplication.InitializeClientContextFromToken((ulong)WindowsIdentity.GetCurrent().Token, null);


            // Use the default application scope.
            string[] roles = (string[])clientContext.GetRoles("");


            foreach (string role in roles)
            {
                Span3.InnerHtml += role.ToString() + "</br>";
            }



        }
    }
}

enter image description here

6 个答案:

答案 0 :(得分:4)

使用Cast<string>()方法。这与协方差/逆变有关。您需要在数组中转换每个项目(这是Cast方法的作用)而不是整个数组。如果你真的需要将它转换成另一个字符串数组,你可以使用ToArray方法,但是从那里你只需要使用foreach就可以了。

foreach(string role in clientContext.GetRoles("").Cast<string>())
{
  //use role
}

您需要添加using System.Linq才能获得Cast扩展程序。

答案 1 :(得分:4)

string[] roles = clientContext.GetRoles("").Cast<string>().ToArray();

答案 2 :(得分:2)

using System.Linq;

string[] roles = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();

希望这有帮助。

答案 3 :(得分:2)

object[] roles=clientContext.GetRoles("");
foreach(object role in roles)
{
   Span3.InnerHtml + = role.ToString() + "</br>";
}

为什么需要将数组转换为string[]?您可以在不进行投射的情况下使用它。

答案 4 :(得分:1)

您可以直接转换为对象[],错误表示该对象;

object[] roles = (object[])clientContext.GetRoles("");

foreach(object role in roles)
{
    Span3.InnerHtml += role.ToString() + "</br>";
}

答案 5 :(得分:1)

正如其他人所指出的,clientContext.GetRoles("").Cast<string>().ToArray()是解决方法。

让我们说如果转换是合法的,会发生什么。你有一个List listOfAnimals。

List<Cow> listOfCows = GetListOfCows();

listOfAnimals = listOfCows;

//After some lines of code

List<Tiger> listOfTiger = GetListOfTigers();

listOfAnimals.Add(listOfTiger); //Epic fail.

您可能不小心将Tiger添加到Cow列表中。这是错误和危险的。 CLR不允许您在代码中引入此类错误。