扩展方法标记为含糊不清

时间:2016-02-04 06:11:04

标签: c# .net

我在使用扩展方法时遇到问题。另一种方法导致了同样的错误,现在我又遇到了同样的问题。编译时 - visual studio将我的扩展方法标记为含糊不清。但我很确定这是我唯一的实现 -

我的扩展方法是 -

public static class TypeInfoExtensions
{
    /// <summary>
    /// Gets the property dictionary.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="types">The types.</param>
    /// <returns></returns>
    public static IEnumerable<Dictionary<string, object>> GetPropertyDictionaryList<T>(this IEnumerable<TypeInfo> types) where T : Attribute
    {
        return types.Select(x => x.GetPropertyDictionary<T>());
    }
    /// <summary>
    /// Gets the property dictionary.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="type">The type.</param>
    /// <returns></returns>
    public static Dictionary<string, object> GetPropertyDictionary<T>(this TypeInfo type) where T : Attribute
    {
        var dict = new Dictionary<string, object>();

        return dict;
    }
}

它就像这样使用 -

var model = ...... // other codes

var parameters = Assembly.GetAssembly(typeof (Model.Domain.Tenants.Tenant)).DefinedTypes;
model.AvailableProperties = parameters.GetPropertyDictionaryList<MessageTemplateItem>().ToList()

这是我唯一的实现,我刚添加它,但VS显示此错误 -

  

错误81以下方法或之间的调用不明确   特性:   &#39; SMP.Core.Extensions.TypeInfoExtensions.GetPropertyDictionary(System.Reflection.TypeInfo)&#39;   和   &#39; SMP.Core.Extensions.TypeInfoExtensions.GetPropertyDictionary(System.Reflection.TypeInfo)&#39;

我在想这可能是一个临时错误,可能是清理解决方案是不是清理引用或缓存。但如果其他任何机构都遇到此错误,我将非常感谢您的反馈。

更新这段代码非常奇怪 -

public static IEnumerable<Dictionary<string, object>> GetPropertyDictionaryList<T>(this IEnumerable<TypeInfo> types) where T : Attribute
{
    return types.Select(x => GetPropertyDictionary<T>(x));
}

我现在感到很困惑,到目前为止,我知道这些扩展方法是相同的 -

GetPropertyDictionary<T>(x)
x.GetPropertyDictionary<T>()

任何想法的人?

2 个答案:

答案 0 :(得分:0)

我有同样的问题。我在项目A中声明了一个扩展方法。虽然在这个项目中使用它,但它在另一个项目B中不起作用。它被标记为含糊不清。然而,在项目B中以静态方式调用它。

在整个解决方案或参考中按字符串搜索时,我找不到项目A中的任何其他实现。

问题最终是:我不小心将项目A的扩展方法的源文件链接添加到项目B中。删除项目B中源文件的链接解决了问题。

答案 1 :(得分:0)

我只是遇到了同一问题。如果不是用于源代码控制,我将永远不会找到它。

该项目多年来一直使用扩展方法。然后,全部进行了一些更改之后,扩展方法的使用开始出现:

  

以下方法或属性之间的调用不明确:...

被调出的两个项目都具有完全相同的名称空间和签名。

csproj文件上的差异显示了问题所在。 obj目录中的输出可执行文件已以某种方式添加为提示路径中的引用。

类似的东西:

<ItemGroup>
    <Reference Include="OutputExecutable">
        <HintPath>obj\DEBUG\OutputExecutable.exe</HintPath>
    </Reference>
</ItemGroup>

删除该错误条目将使所有内容重新构建。目前,如何到达那里是一个谜。