C#:无法将类型 A 转换为类型 B,其中 A = B

标签 c# types

我目前从 InvalidCastException 中收到此错误

[A]System.Data.Objects.ObjectResult`1[EDMXAssembly.ServiceStatus] cannot be cast to 
[B]System.Data.Objects.ObjectResult`1[EDMXAssembly.ServiceStatus]. 
Type A originates from 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089' in the context 'Default' at location 
'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll'. 
Type B originates from 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the 
context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll'.

又长又丑!

我正在使用反射来调用在运行时加载的程序集中的方法。我正在调用的方法返回 ObjectResult<T> .当我尝试将调用结果转换为那个时出现错误。

我认为这是由于运行时加载的程序集包含对 System.Data.Entity 的引用,以及执行反射和转换的程序集;因为这是两个不同的引用,所以类型被视为不同。 (我离那里有多远?)

有什么办法可以解决这个问题吗?我正在调用的方法在 ObjectContext 上,所以我无法更改它返回的内容。

谢谢

编辑片段:

public QueryResultSet<T> ObjectQuery<T>(string dataContext, string functionName, List<ObjectParameter> functionParameters)
{
    var context = htContexts[dataContext];
    ObjectResult<T> qResult = (ObjectResult<T>)context.GetType().InvokeMember(functionName, BindingFlags.InvokeMethod, null, context, functionParameters.ToArray());

    return qResult;
}

错误发生在qResult行(我现在只是在很快地模拟这个,因此缺少 try-catch)

最佳答案

这是一个很好的例子,说明了为什么您需要将接口(interface)保存在一个公共(public)的、独立的库中。您需要为 ObjectResult 使用一个接口(interface)。这样,您的 ObjectResult 可以在您的其他程序集之间有一个共同的契约。

编辑
如果您无法对源 ObjectResult 应用任何继承,您可能必须对返回的对象执行更多反射才能将其转换为您的ObjectResult。警告:这可能是一次代价高昂的转换......

...或重构以获得另一个解决方案。

关于C#:无法将类型 A 转换为类型 B,其中 A = B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7094271/

相关文章:

c# - 如何在 Razor TextBoxFor 中呈现的 EF Code First 中将小数格式设置为百分比?

c# - 如何指示何时故意忽略返回值

c# - 如何删除文本文件中不是大于特定值的数字的所有行? (包括字符串)

haskell - 将类型作为参数传递给 Haskell 中的函数?

types - 为什么《如何设计程序》这本书在他们的答卷上选择了这种方法?

c# - 检查 null 时,泛型函数是否将值类型隐式转换为对象?

c# - 使用 AWS Cognito 登录用户/验证用户

c# - 泛型类的协方差

types - 可编辑组合框 : issues with getValue()

javascript - 如何在 Flow 中返回的 React$Element 中指定可选 prop?