可选参数:编译时间常数问题

时间:2012-09-04 14:57:01

标签: c# .net compiler-errors

为什么这样做:

public int DoesEmailAddressExistsExcludingEmailAddressID(
    string emailAddress, 
    string invitationCode, 
    int emailAddressID = 0, 
    int For = (int) Enums.FOR.AC)

而这不是

public int DoesEmailAddressExistsExcludingEmailAddressID(
    string emailAddress, 
    string invitationCode, 
    int emailAddressID = 0, 
    int For = Enums.FOR.AC.GetHashCode())

其中AC是枚举。枚举的哈希码可以在运行时更改吗?

2 个答案:

答案 0 :(得分:5)

GetHashCode是一种方法。方法的返回值不是编译时常量,因为需要执行代码来确定返回值 无论方法是否始终返回都无关紧要。

答案 1 :(得分:2)

在程序运行时,Enum的哈希码很可能保持不变。但是,在编译时这不是保证。因此它不能是编译时常量。

此外,正如Daniel已经提到的那样,必须执行GetHashCode来确定值,这显然不能在编译时完成。