无法将system.directoryservices.account manager.userprincipal隐式转换为扩展的userprincipal

时间:2013-08-21 18:04:40

标签: c#

我创建了一个类和派生类。如何从另一个类调用派生类?请参阅下面的类,派生类(扩展类)以及我调用派生类的位置。

UserPrincipal上课:

private UserPrincipal GetUserFromAD1(string userLoginName)
{
        String currentUser = userLoginName;
        String domainName = userLoginName.Split('\\')[0];
        UserPrincipal user = null;

        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName))
            {

                user = UserPrincipal.FindByIdentity(pc, System.DirectoryServices.AccountManagement.IdentityType.SamAccountName, currentUser);

            }
        });
        return user;
    }    

扩展UserPrincipal课程:

    [DirectoryObjectClass("user")]
    [DirectoryRdnPrefix("CN")]

    public class UserPrincipalExtended : UserPrincipal
    {
        public UserPrincipalExtended(PrincipalContext context): base(context)                

        {

        }
        [DirectoryProperty("department")]
        public string department
        {
            get
            {
                if (ExtensionGet("department").Length != 1)
                    return null;
                return (string)ExtensionGet("department")[0];
            }
            set { this.ExtensionSet("department", value); }
        }

方法

private void GetUserInfoFromAD1()
{
        try
        {

            XPathNavigator rootNode = this.MainDataSource.CreateNavigator();
            this.initialData = rootNode.SelectSingleNode("/my:myFields/my:Wrapper", this.NamespaceManager).OuterXml;
            using (SPSite site = new SPSite(SPContext.Current.Web.Url))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    UserPrincipalExtended userFromAD = this.GetUserFromAD1(web.CurrentUser.LoginName);

在代码行

this.GetUserFromAD1(web.CurrentUser.LoginName) 

我收到错误:

  

无法隐式转换类型.......

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试将UserPrincipal返回的GetUserFromAD1实例分配给UserPrincipalExtended类型的变量。

这不是可以隐式执行的类型转换。

您可以隐式地将类型的实例分配给其超类型(或其超类型或其实现的接口)。

您不能隐式地将类型的实例分配给该类型的子类型。

请考虑在department上实施UserPrincipal作为扩展方法,或者使UserPrincipalExtended成为UserPrincipal实例的包装器,或者提供强制转换操作符来转换UserPrincipal转到UserPrincipalExtended,或使用复制构造函数。

有许多设计可以用于此目的。你写的那个不会。