以下方法或属性之间的调用不明确 - C#

时间:2015-07-01 12:09:31

标签: c# asp.net

浏览页面时没有点击断点和此错误。在页面加载时调用GetFilters函数。 如果对数据表转换为列表的行进行了注释,则页面加载正常且没有错误。

public static void GetFilters(out List<Set> lstSets)
{
    lstSets = null;
    DataSet ds = Getdata();

    if (ds != null && ds.Tables.Count > 0)
    {
        if (ds.Tables[0].Rows.Count > 0)
        {
            lstSets = ds.Tables[0].DataTableToList<Set>();
        }          
    }
}

Helper.cs

public static class Helper
{
    public static List<T> DataTableToList<T>(this DataTable table) where T : class, new()
    {
        List<T> list = new List<T>();
        foreach (var row in table.AsEnumerable())
        {
            T obj = new T();
            foreach (var prop in obj.GetType().GetProperties())
            {
                try
                {
                    PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.Name);
                    propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], 
                                    propertyInfo.PropertyType), null);
                }
                catch
                {
                    continue;
                }
            }
            list.Add(obj);
        }
        return list;                     
     }
 }

错误:

The call is ambiguous between the following methods or properties: 
'Helper.DataTableToList<Set>(System.Data.DataTable)' and 
'Helper.DataTableToList<Set>(System.Data.DataTable)'

我评论了行lstSets = ds.Tables[0].DataTableToList<Set>();,为GetFilters添加了断点。断点现在被击中,在使用F10进行调试时,我删除了注释,并且它很好地工作正常并且页面正常加载。

我哪里出错。

2 个答案:

答案 0 :(得分:1)

我的猜测是你实际上引用了同一个程序集的两个不同版本(强名称?)。直接引用或其中一个程序集正在使用您正在使用的同一程序集的另一个版本。

所以你有两个不同版本的DataTableToList或Set somehow同时加载。

答案 1 :(得分:-2)

当运行时看到在同一名称空间中多次定义的相同方法时,会发生此错误。