首页 文章

C# - 值不能为空 . 参数名称:类型

提问于
浏览
1

当我尝试运行下面的代码时,我得到了

“值不能为空 . 参数名称:类型”

运行时出错 .

如何处理此异常以及为什么我的 objectName 在此处为空?我希望 objectName 能够在我的计算机上保存本地用户帐户的值 .

namespace Users {class EnableDisableUsers {public static void Main(string [] args){

Console.WriteLine("Enter user account to be enabled or disabled");
        var user = Console.ReadLine();
        Console.WriteLine("Enter E to enable and D to disable the user account");
        string enableStr = Console.ReadLine();
        bool enable;
        var computer = ".";

        if (enableStr.Equals("E") || enableStr.Equals("e"))
        {
            enable = true;

            var objectName = "WinNT://" + computer + "/" + user + ",user";
            dynamic objUser = Activator.CreateInstance(Type.GetTypeFromProgID(objectName));
            objUser.AccountDisabled = false;
            objUser.SetInfo();
            Console.WriteLine(user + " Enabled = " + result.ToString());
            Console.ReadLine();
        }
        else if (enableStr.Equals("D") || enableStr.Equals("d"))
        {
            enable = false; 
            var objectName = "WinNT://" + computer + "/" + user + ",user";
            dynamic objUser = Activator.CreateInstance(Type.GetTypeFromProgID(objectName));
            objUser.AccountDisabled = true;
            objUser.SetInfo();
            Console.WriteLine(user + " Enabled = " + result.ToString());
            Console.ReadLine();    
        }
        else
        {
            Console.WriteLine("Operation for " + user + " failed ");
        }
    }
}

任何帮助都会有用 .

1 回答

  • 1

    如何处理此异常以及为什么我的objectName在这里为null?

    objectName 不会是 null . 更可能的情况是 Type.GetTypeFromProgID(objectName) 返回null,因为prog-id没有't exist, or the account doesn't可以访问 .

    检查 Type.GetTypeFromProgID(objectName) 返回的内容,并采取相应措施 . 确保它实际上是一个prog-id,并且您正确使用该API . 例如:

    var type = Type.GetTypeFromProgID(objectName);
    if(type == null) throw new InvalidOperationException(
        "Invalid prog-id: " + objectName);
    dynamic objUser = Activator.CreateInstance(type);
    

    编辑:注意 Activator.CreateInstancenot 与VBScript的 GetObject 相同 . 要访问它,请参考 Microsoft.VisualBasic.dll ,并使用:

    dynamic obj = Microsoft.VisualBasic.Interaction.GetObject(objectName);
    

相关问题