简体   繁体   English

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

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

I know this is very trivial, but unfortunately doesn't work for me at all.我知道这是非常微不足道的,但不幸的是根本不适合我。 I have create a function which return List from Active Directory .我创建了一个 function ,它从Active Directory返回 List 。 And right now when I run application I didn't get any data in Console现在,当我运行应用程序时,我没有在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;
        }


    }
}

I try我试试

Console.WriteLine(VratiKorisnike<>); 

Any help how to call this function to Main() public List<Korisnik> VratiKorisnike()任何帮助如何将此 function 调用到 Main() public List<Korisnik> VratiKorisnike()

There are several issues with your approach.你的方法有几个问题。 First of all any method you call without an instance of a class has to be static, but your VratiKorisnike method is not.首先,您在没有 class 实例的情况下调用的任何方法都必须是 static,但您的VratiKorisnike方法不是。 You have to add static modifier ti it's declaration.您必须在声明中添加static修饰符。

public static List<Korisnik> VratiKorisnike()

This will fix compile time error, but still won't give you result you are expecting, because这将修复编译时错误,但仍然不会给您预期的结果,因为

Console.WriteLine(VratiKorisnike()); 

is equivalent to相当于

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

which will simply print System.Collections.Generic.List`1[ActiverDirectory.Korisnik]这将简单地打印System.Collections.Generic.List`1[ActiverDirectory.Korisnik]

To get information about each instance of Korisnik class inside List<Korisnik> returned by VratiKorisnike method you have to override ToString() method inside Korisnik class and then call it on each element of your list.要获取由VratiKorisnike方法返回的List<Korisnik>中每个Korisnik class 实例的信息,您必须覆盖Korisnik class 中的ToString()方法,然后在列表的每个元素上调用它。

Just add something like this to your Korisnik class只需将这样的内容添加到您的Korisnik class

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

Then you can use LINQ Aggregate extension method or simple for / foreach loop to get all those strings and print them.然后您可以使用 LINQ Aggregate扩展方法或简单for / foreach循环来获取所有这些字符串并打印它们。 For example you could jus add this, to your Main method例如,您可以将其添加到您的Main方法中

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM