C# Список вызовов <User>в основной класс - PullRequest
0 голосов
/ 23 апреля 2020

Я знаю, что это очень тривиально, но, к сожалению, у меня вообще не работает. Я создал функцию, которая возвращает список из Active Directory. И сейчас, когда я запускаю приложение, я не получаю никаких данных в 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<>); 

Любая помощь, как вызвать эту функцию для Main () public List<Korisnik> VratiKorisnike()

1 Ответ

0 голосов
/ 23 апреля 2020

Есть несколько проблем с вашим подходом. Прежде всего, любой метод, который вы вызываете без экземпляра класса, должен быть stati c, а ваш метод VratiKorisnike - нет. Вы должны добавить static модификатор к его объявлению.

public static List<Korisnik> VratiKorisnike()

Это исправит ошибку времени компиляции, но все равно не даст ожидаемого результата, потому что

Console.WriteLine(VratiKorisnike()); 

эквивалентно

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

, который просто напечатает System.Collections.Generic.List`1[ActiverDirectory.Korisnik]

Чтобы получить информацию о каждом экземпляре Korisnik класса внутри List<Korisnik>, возвращаемом VratiKorisnike метод, который нужно переопределить ToString() метод внутри Korisnik класса, а затем вызвать его для каждого элемента вашего списка.

Просто добавьте что-то подобное в ваш Korisnik класс

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

Затем вы можете использовать метод расширения LINQ Aggregate или простой for / foreach l oop, чтобы получить все эти строки и распечатать их. Например, вы можете добавить это к вашему Main методу

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