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