簡體   English   中英

C# 調用列表<user>至主 Class</user>

[英]C# call List<User> to Main Class

我知道這是非常微不足道的,但不幸的是根本不適合我。 我創建了一個 function ,它從Active Directory返回 List 。 現在,當我運行應用程序時,我沒有在Console中獲得任何數據

    using System;
using System.Collections.Generic;
using System.Data;
using System.DirectoryServices;

namespace ActiverDirectory
{
    public class Korisnik
    {
        public int Id { get; set; }
        public string Ime { get; set; }
        public string Prezime { get; set; }
        public string LoginName { get; set; }
        public bool Status { get; set; }
        public DateTime AccountExpired { get; set; }
        public bool PassNevExp { get; set; }
        public string DomenskaGrupa { get; set; }
        public string Email { get; set; }
        public override string ToString()
        {
            return $"samaccountname: {Ime}, usergroup: {Prezime}";
        }

    }

    class Program
    {
        static void Main(string[] args)
        {

            foreach (Korisnik korisnik in VratiKorisnike())
            {
                Console.WriteLine(korisnik);
            }

        }



        public static List<Korisnik> VratiKorisnike()
        {
            List<Korisnik> lstADUsers = new List<Korisnik>();
            string sDomainName = "sarajevoosigura";
            string DomainPath = "LDAP://" + sDomainName;

            DirectoryEntry searchRoot = new DirectoryEntry(DomainPath);
            DirectorySearcher search = new DirectorySearcher(searchRoot);

            search.Filter = "(&(objectClass=user)(objectCategory=person))";
            search.PropertiesToLoad.Add("samaccountname");
            search.PropertiesToLoad.Add("usergroup");
            search.PropertiesToLoad.Add("displayname");
            search.PropertiesToLoad.Add("userAccountControl");
            search.PropertiesToLoad.Add("PasswordExpirationDate");


            DataTable resultsTable = new DataTable();
            resultsTable.Columns.Add("samaccountname");
            resultsTable.Columns.Add("displayname");
            resultsTable.Columns.Add("Neaktivan");
            resultsTable.Columns.Add("UserAccountContol");
            resultsTable.Columns.Add("PasswordExpirationDate");


            SearchResult result;
            //int i;
            SearchResultCollection resultCol = search.FindAll();

            if (resultCol != null)
            {
                for (int counter = 0; counter <= (resultCol.Count - 1); counter++)
                {
                    string UserNameEmailString = string.Empty;

                    result = search.FindOne();
                    if ((result.Properties.Contains("samaccountname") && result.Properties.Contains("displayname")))
                    {
                        Korisnik korisnik = new Korisnik();
                        korisnik.Ime = ((string)(result.Properties["samaccountname"][0]));
                        korisnik.Prezime = ((string)(result.Properties["displayname"][0]));
                        korisnik.AccountExpired = (DateTime)result.Properties["userAccountControl"][0];
                        korisnik.PassNevExp = ((bool)result.Properties["PasswordExpirationDate"][0]);


                        DataRow dr = resultsTable.NewRow();
                        dr["samaccountname"] = korisnik.Ime;
                        dr["displayname"] = korisnik.Prezime.ToString();
                        dr["Nekativan"] = korisnik.AccountExpired.ToString();
                        dr["PassExp"] = korisnik.AccountExpired.ToString();
                        resultsTable.Rows.Add(dr);
                        lstADUsers.Add(korisnik);
                    }
                }
            }
            return lstADUsers;
        }


    }
}

我試試

Console.WriteLine(VratiKorisnike<>); 

任何幫助如何將此 function 調用到 Main() public List<Korisnik> VratiKorisnike()

你的方法有幾個問題。 首先,您在沒有 class 實例的情況下調用的任何方法都必須是 static,但您的VratiKorisnike方法不是。 您必須在聲明中添加static修飾符。

public static List<Korisnik> VratiKorisnike()

這將修復編譯時錯誤,但仍然不會給您預期的結果,因為

Console.WriteLine(VratiKorisnike()); 

相當於

Console.WriteLine(VratiKorisnike().ToString());

這將簡單地打印System.Collections.Generic.List`1[ActiverDirectory.Korisnik]

要獲取由VratiKorisnike方法返回的List<Korisnik>中每個Korisnik class 實例的信息,您必須覆蓋Korisnik class 中的ToString()方法,然后在列表的每個元素上調用它。

只需將這樣的內容添加到您的Korisnik class

public override string ToString()
{
    return $"Id: {Id}, Ime: {Ime} ... whatever other text you want";
}

然后您可以使用 LINQ Aggregate擴展方法或簡單for / foreach循環來獲取所有這些字符串並打印它們。 例如,您可以將其添加到您的Main方法中

foreach (Korisnik korisnik in VratiKorisnike())
{
    Console.WriteLine(korisnik);
}

暫無
暫無

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

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