首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模糊匹配找到异常

模糊匹配找到异常
EN

Stack Overflow用户
提问于 2022-07-28 11:50:26
回答 1查看 312关注 0票数 2

在从.NET 5升级到net core 3.1之前,这个曾经工作得很好。

生成错误的扩展方法是

代码语言:javascript
复制
public static IQueryable Set(this myContext context, Type T)
{
    MethodInfo method = typeof(myContext).GetMethod(nameof(myContext.Set), BindingFlags.Public | BindingFlags.Instance);

    method = method.MakeGenericMethod(T);

    return method.Invoke(context, null) as IQueryable;
}

尤其是这条线

代码语言:javascript
复制
MethodInfo method = typeof(myContext).GetMethod(nameof(myContext.Set), BindingFlags.Public | BindingFlags.Instance);

堆栈跟踪是

代码语言:javascript
复制
   at System.RuntimeType.GetMethodImplCommon(String name, Int32 genericParameterCount, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
   at System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
   at System.Type.GetMethod(String name, BindingFlags bindingAttr)
   at Extensions.QueryableExtensions.Set(RetailContext context, Type T, Boolean dummy) in QueryableExtensions.cs:line 36

这个模棱两可的错误从何而来?

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 02:29:55

DbContext.Set方法有两个重载。你需要告诉反射是哪一个。

https://learn.microsoft.com/en-us/dotnet/api/system.data.entity.dbcontext.set?view=entity-framework-5.0.0

例如。

代码语言:javascript
复制
MethodInfo method = typeof(myContext).GetMethod(nameof(myContext.Set), Array.Empty<Type>());
代码语言:javascript
复制
MethodInfo method = typeof(myContext).GetMethod(nameof(myContext.Set), new Type[] { typeof(string) });

我删除了BindingFlags.Public | BindingFlags.Instance参数,因为这是默认的。如果您正在寻找一个非公共方法,您可以使用包含它的重载之一,但我相信它们也需要一些其他参数。

第三个选项是使用GetMethods调用,然后使用linq选择正确的调用。

例如。

代码语言:javascript
复制
typeof(myContext).GetMethods(/*Can add binding flags if needed*/).First(w => w.Name == nameof(myContext.Set) && w.GetParameters().Count() == 0 /* Or some other condition to disambiguate the function*/)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73152427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档