我在使用扩展方法时遇到问题。另一种方法导致了同样的错误,现在我又遇到了同样的问题。编译时 - 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>()
任何想法的人?
答案 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>
删除该错误条目将使所有内容重新构建。目前,如何到达那里是一个谜。