0

このデータのリストを取得する別のアイデアはありますか?

これはあなたにとってはるかに簡単になると思うので、すべてのコードを表示したいと思います。このコードでは、ロール ファイルに接続する方法を確認できます。

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>";
            }



        }
    }
}

ここに画像の説明を入力

4

6 に答える 6

4

メソッドを使用しCast<string>()ます。これは、共分散/反分散に関連しています。Cast配列全体ではなく、配列内の各項目をキャストする必要があります (これはメソッドが行うことです)。本当に別の文字列配列に変換する必要がある場合は、ToArrayメソッドを使用できますが、ここでは a を使用しているだけforeachなので、その必要はありません。

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

拡張メソッドusing System.Linqを取得するには、を追加する必要があります。Cast

于 2012-04-23T20:37:24.567 に答える
4
string[] roles = clientContext.GetRoles("").Cast<string>().ToArray();
于 2012-04-23T20:37:37.533 に答える
2
object[] roles=clientContext.GetRoles("");
foreach(object role in roles)
{
   Span3.InnerHtml + = role.ToString() + "</br>";
}

配列をにキャストする必要があるのはなぜstring[]ですか?全くキャストせずに使用できます。

于 2012-04-23T20:38:03.527 に答える
2
using System.Linq;

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

お役に立てれば。

于 2012-04-23T20:37:39.970 に答える
1

object[] にキャストするだけで、代わりにエラーが表示されます。

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

foreach(object role in roles)
{
    Span3.InnerHtml += role.ToString() + "</br>";
}
于 2012-04-23T20:43:53.110 に答える
1

他の人が指摘したように、clientContext.GetRoles("").Cast<string>().ToArray()回避策です。

変換が合法である場合に何が起こるかを考えてみましょう。リストlistOfAnimalsがあります。

List<Cow> listOfCows = GetListOfCows();

listOfAnimals = listOfCows;

//After some lines of code

List<Tiger> listOfTiger = GetListOfTigers();

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

Tigerのリストに誤って追加した可能性がありCowます。これは間違っていて危険です。CLR では、このようなバグをコードに導入することはできません。

于 2012-04-23T20:44:11.870 に答える