我想创建一个接受两个参数的方法;首先是用户名,第二个是要返回的Active Directory属性的名称...该方法存在于单独的类(SharedMethods.cs
)中,如果在方法中本地定义属性名称,则可以正常工作我不能训练如何从第二个参数传递这个。
以下是方法:
public static string GetADUserProperty(string sUser, string sProperty)
{
PrincipalContext Domain = new PrincipalContext(ContextType.Domain);
UserPrincipal User = UserPrincipal.FindByIdentity(Domain, sUser);
var Property = Enum.Parse<UserPrincipal>(sProperty, true);
return User != null ? Property : null;
}
调用它的代码如下;
sDisplayName = SharedMethods.GetADUserProperty(sUsername, "DisplayName");
目前Enum.Parse
引发了以下错误:
非泛型方法'system.enum.parse(system.type,string,bool)'不能与类型参数一起使用
我可以通过删除Enum.Parse
并手动指定要检索的属性来使其工作:
public static string GetADUserProperty(string sUser, string sProperty)
{
PrincipalContext Domain = new PrincipalContext(ContextType.Domain);
UserPrincipal User = UserPrincipal.FindByIdentity(Domain, sUser);
return User != null ? User.DisplayName : null;
}
非常确定我错过了一些明显的东西,感谢每个人的时间。
答案 0 :(得分:0)
如果要根据属性名称动态获取属性的值,则需要使用反射。
请看一下这个答案:Get property value from string using reflection in C#
答案 1 :(得分:0)
因为UserPrincipal不是枚举,所以这很难,但正如Svein所说,这可能是反思。
public static string GetAdUserProperty(string sUser, string sProperty)
{
var domain = new PrincipalContext(ContextType.Domain);
var user = UserPrincipal.FindByIdentity(domain, sUser);
var property = GetPropValue(user, sProperty);
return (string) (user != null ? property : null);
}
public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}