您是否有另一个想法来获取此数据列表?
我想展示我的所有代码,因为我觉得这对你来说更容易。在此代码中,您可以看到我如何连接角色文件。
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>";
}
}
}
}
答案 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不允许您在代码中引入此类错误。