不明确的通用限制T:class vs T:struct

时间:2010-04-27 03:02:36

标签: c# generics

此代码生成编译器错误,该错误已使用相同的参数类型定义成员。

   private T GetProperty<T>(Func<Settings, T> GetFunc) where T:class
    {
        try
        {
            return GetFunc(Properties.Settings.Default);
        }
        catch (Exception exception)
        {
            SettingReadException(this,exception);
            return null;
        }
    }

    private TNullable? GetProperty<TNullable>(Func<Settings, TNullable> GetFunc) where TNullable : struct
    {
        try
        {
            return GetFunc(Properties.Settings.Default);
        }
        catch (Exception ex)
        {
            SettingReadException(this, ex);
            return new Nullable<TNullable>();
        }
    }

有干净的工作吗?

1 个答案:

答案 0 :(得分:3)

通用类型约束不能用于重载解析,但实际上您不需要重载方法。只需使用default代替null

private T GetProperty<T>(Func<Settings, T> GetFunc)
{
    try
    {
        return GetFunc(Properties.Settings.Default);
    }
    catch (Exception exception)
    {
        SettingReadException(this,exception);
        return default(T);
    }
}

哦,我已经逐字复制了你的代码,但不要像这样吞下一般的Exception。捕获您实际可能会抛出的特定异常。您不希望此代码无意中吞噬OutOfMemoryExceptionBadImageFormatException个实例。