C#中未指定类型的变量?

Pet*_*y B 4 c# types sha

我是否可以在没有类型的情况下声明变量,然后根据某些条件指定类型?例如,我想根据用户想要使用的大小创建一个SHA Hash对象:

        //get the Sha hasher
        var shaHash;

        switch (this.HASH_ALGORITHM)
        {
            case HashAlgorithm.SHA256:  //HashAlgorithm is an enum.
                shaHash = SHA256.Create();
                break;
            case HashAlgorithm.SHA384:
                shaHash = SHA384.Create();
                break;
            case HashAlgorithm.SHA512:
                shaHash = SHA512.Create();
                break;
        }

        //... do hashing
Run Code Online (Sandbox Code Playgroud)

这可能吗?

mdm*_*mdm 18

不,那不行.但是,鉴于所有这三种类型都继承自System.Security.Cryptography.HashAlgorithm,您可以声明该类型的变量:

HashAlgorithm shaHash;

switch(this.HASH_ALGORITHM)
{
    // snip
}
Run Code Online (Sandbox Code Playgroud)

编辑

只是补充一点,之所以var shaHash;不起作用的原因是因为这var只是一种简短的说法"我不确定这里使用的最佳类型,所以请为我推断它".编译器要求您指定初始值,以便它可以确定要使用的最佳类型.