[英]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.