0

请考虑以下代码段:

protected object GetArg(Dictionary<string, object> args, string argName)
{
    object arg;
    if (args.TryGetValue(argName, out arg))
    {
        return arg;
    }
    return null;
}
protected T GetArg<T>(Dictionary<string, object> args, string argName) where T : class
{
    return GetArg(args, argName) as T;
}
//following does not compile: 
//Type ... already defines a member called 'GetArg' with the same parameter types
protected T GetArg<T>(Dictionary<string, object> args, string argName) where T : struct
{
    Nullable<T> arg = GetArg(args, argName) as Nullable<T>;
    return arg.HasValue ? arg.Value : default(T);
}

不应该将 T 参数类型限制为在上述泛型声明之间互斥就足以保证明确性吗?为什么在这种情况下编译器不考虑类型约束?有什么我想念的吗?

4

0 回答 0