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);
    }

コードからこの関数を呼び出すと、コンパイラは2つの呼び出しの間にあいまいな参照があると文句を言います。これは、メソッドのシグネチャを見ると明らかです。ただし、別のメソッドを使用せずにこれを処理する方法がわかりません。

4

2 に答える 2

3

戻り値は、識別メソッドのシグネチャの一部ではありません。したがって、コンパイラにとって、メソッドは次のようになります。

SafeRead<T>(DataRow row, string fieldName)

SafeRead<T>(DataRow row, string fieldName)

->違いはありません。

メソッドの1つを名前変更する必要があります。

于 2012-04-18T14:32:13.353 に答える
-2

これは、両方の名前空間に同じオブジェクトが含まれているためです。これを解決するには、タイプエイリアスを使用します

:エラーが発生した場合、次のSystem.Drawing.Imageステートメントを使用すると、クラスのエイリアスを作成できます。System.Web.UI.WebControlsusingSystem.Drawing

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