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

以下方法或属性之间的调用不明确-C#,c#,asp.net,C#,Asp.net,未达到断点,因此在浏览页面时会出现此错误。页面加载时调用GetFilters函数。 如果对datatable转换为list的行进行了注释,则页面将正常加载,不会出现错误 public static void GetFilters(out List<Set> lstSets) { lstSets = null; DataSet ds = Getdata(); if (ds != null && ds.Tables.Count > 0)

未达到断点,因此在浏览页面时会出现此错误。页面加载时调用
GetFilters
函数。 如果对datatable转换为list的行进行了注释,则页面将正常加载,不会出现错误

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>();
        }          
    }
}
publicstaticvoidgetfilters(out-List-set)
{
lstSets=null;
数据集ds=Getdata();
如果(ds!=null&&ds.Tables.Count>0)
{
如果(ds.Tables[0].Rows.Count>0)
{
lstSets=ds.Tables[0].DataTableToList();
}          
}
}
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;                     
     }
 }
公共静态类帮助器
{
公共静态列表DataTableToList(此DataTable表),其中T:class,new()
{
列表=新列表();
foreach(表中的var行。AsEnumerable())
{
T obj=新的T();
foreach(obj.GetType().GetProperties()中的var prop)
{
尝试
{
PropertyInfo PropertyInfo=obj.GetType().GetProperty(prop.Name);
propertyInfo.SetValue(obj,Convert.ChangeType(行[prop.Name],
propertyInfo.PropertyType),空);
}
抓住
{
继续;
}
}
列表。添加(obj);
}
退货清单;
}
}
错误:

The call is ambiguous between the following methods or properties: 
'Helper.DataTableToList<Set>(System.Data.DataTable)' and 
'Helper.DataTableToList<Set>(System.Data.DataTable)'
以下方法或属性之间的调用不明确:
'Helper.DataTableToList(System.Data.DataTable)'和
'Helper.DataTableToList(System.Data.DataTable)'
我对行
lstSets=ds.Tables[0].DataTableToList()进行了注释
,为
GetFilters
设置断点。断点现在被击中了,在使用F10进行调试时,我删除了注释,而且它工作正常,页面加载正常


哪里出了问题。

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

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


因此,您同时加载了DataTableToList或Set的两个不同版本。

您最近是否在代码中移动了该方法?也许改变了项目?尝试清理项目并重建所有内容。返回的数据集结果只有Id&name,而
Set
类有许多其他道具。与Id和名称一起定义良好。这可能是一个原因吗。此外,它只是一个测试应用程序。我找不到第二个引用。如果有的话。该程序集包含Helper.DataTableToList(),是否有其他同名或方法的类。程序集是否驻留在GAC中?如果没有,请尝试清理项目。同时尝试删除c:\Windows\Microsoft.NET\Framework*下所有“临时ASP.NET文件”文件夹的所有内容。可能是正在使用的程序集的旧版本。当它失败时,尝试破坏代码并查看所有加载的模块,看看是否可以多次看到程序集加载。脏选项:重命名助手类。这将阻止您的代码使用该类的任何旧版本—没有其他同名的类或方法。但我仍然将Helper类重命名为Extensions,并将方法名重命名。不走运。我还检查了临时ASP.Net文件,但没有找到任何具有当前项目名称的文件夹。请在代码中搜索所有“DataTableToList”函数。我猜有两种扩展方法。完全相同的在您的程序集中或在另一个程序集中。如果找不到重复的.0,请尝试重命名DataTableToList方法名称。尝试清除helper类中的所有using语句,只添加所需的语句。使用完整命名空间显式定义函数定义中使用的每个类。使用System.Data.DataTable代替DataTable。与其使用列表,不如将其全名与命名空间一起使用:System.Collections.Generic.List等。我认为不同版本的.Net DataTable不会有任何问题,但如果您使用的是在另一个程序集中创建的DataTables,.Net版本可能会关闭。。。?(我对此表示怀疑)