2

我试图创建一个通用方法来使用 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);
    }

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

4

2 回答 2

3

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

SafeRead<T>(DataRow row, string fieldName)

SafeRead<T>(DataRow row, string fieldName)

-> 没有区别。

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

于 2012-04-18T14:32:13.353 回答
-2

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

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

using GdiImage = System.Drawing.Image;
using System.Web.UI.WebControls;
于 2016-04-07T09:52:23.980 回答