泛型方法之间的模糊引用

时间:2012-04-18 14:28:58

标签: c# generics

我试图创建一个通用方法,使用datarowextension方法从数据行中读取列值:

public static Nullable<T> SafeRead<T>(DataRow row, string fieldName) where T : struct
    {
        if (row.HasColumn(fieldName))
        {
            return row.Field<Nullable<T>>(fieldName) ?? default(Nullable<T>);
        }
        else
            return default(Nullable<T>);
    }

    public static T SafeRead<T>(DataRow row, string fieldName) where T : class
    {
        if (row.HasColumn(fieldName))
        {
            return row.Field<T>(fieldName) ?? default(T);
        }
        else
            return default(T);
    }

当我从我的代码中调用此函数时,编译器会抱怨两个调用之间存在模糊引用,这在我查看方法签名时很明显。但是,我不知道如何在不使用单独方法的情况下处理这个问题。

2 个答案:

答案 0 :(得分:3)

返回值不是识别方法签名的一部分。所以你的方法对编译器来说是这样的:

SafeRead<T>(DataRow row, string fieldName)

SafeRead<T>(DataRow row, string fieldName)

- &GT;没有区别。

你应该重命名其中一种方法。

答案 1 :(得分:-2)

这是因为两个名称空间都包含相同的对象。要解决此问题,请使用类型别名

示例:如果System.Drawing.ImageSystem.Web.UI.WebControls导致错误,则以下using语句将允许您为System.Drawing创建别名类:

using GdiImage = System.Drawing.Image;
using System.Web.UI.WebControls;