转换为 OrganizationServiceContext 时出现 InvalidCastException
InvalidCastException while casting to OrganizationServiceContext
我有一个由 CrmSvcUtil 生成的早期绑定 class:
public partial class CustomerCrmServiceContext : Microsoft.Xrm.Sdk.Client.OrganizationServiceContext
{
...
...
}
然后我有一个像这样的class(短版):
public abstract class PluginClass<T, C> : PluginClassBase<T> where T : Entity where C : OrganizationServiceContext
{
protected new C ServiceContext;
protected PluginClass(IOrganizationService service, ITracingService tracer) : base(service, tracer)
{
ServiceContext = (C)base.ServiceContext;
}
}
而基础 class 是这样的:
public abstract class PluginClassBase: IDisposable
{
...
...
protected readonly OrganizationServiceContext ServiceContext;
...
...
}
我正在这样使用 class:
public class DoWomethingWorkerPlugin : PluginClass<account, CustomerCrmServiceContext>
{
...
}
我的问题是以下语句:
ServiceContext = (C)base.ServiceContext;
这会抛出一个 InvalidCastException 说:
"Unable to cast object of type
'Microsoft.Xrm.Sdk.Client.OrganizationServiceContext' to type
'Customer.DataModel.CustomerCrmServiceContext"
我很困惑,因为生成的 class“CustomerCrmServiceContext”具有基本类型“OrganizationServiceContext”,因此转换应该有效。
有人知道当基类型相同时什么会导致 InvalidCastException 吗?
尽管 CustomerCrmServiceContext
是 OrganizationServiceContext
,但反之则不然,这就是为什么您会得到异常。
演员不能在运行时神奇地改变对象的类型。
通过使用强制转换,您实际上是在告诉编译器 “虽然您认为此对象是 SomeBaseType
,但我知道,在运行时,它始终是 [=13] 的实例=] 所以请这样对待它".
如果在运行时发现对象不是您尝试转换为的类型,您将得到一个 InvalidCastException
,并且 OrganizationServiceContext
不是 CustomerCrmServiceContext
.
我有一个由 CrmSvcUtil 生成的早期绑定 class:
public partial class CustomerCrmServiceContext : Microsoft.Xrm.Sdk.Client.OrganizationServiceContext
{
...
...
}
然后我有一个像这样的class(短版):
public abstract class PluginClass<T, C> : PluginClassBase<T> where T : Entity where C : OrganizationServiceContext
{
protected new C ServiceContext;
protected PluginClass(IOrganizationService service, ITracingService tracer) : base(service, tracer)
{
ServiceContext = (C)base.ServiceContext;
}
}
而基础 class 是这样的:
public abstract class PluginClassBase: IDisposable
{
...
...
protected readonly OrganizationServiceContext ServiceContext;
...
...
}
我正在这样使用 class:
public class DoWomethingWorkerPlugin : PluginClass<account, CustomerCrmServiceContext>
{
...
}
我的问题是以下语句:
ServiceContext = (C)base.ServiceContext;
这会抛出一个 InvalidCastException 说:
"Unable to cast object of type 'Microsoft.Xrm.Sdk.Client.OrganizationServiceContext' to type 'Customer.DataModel.CustomerCrmServiceContext"
我很困惑,因为生成的 class“CustomerCrmServiceContext”具有基本类型“OrganizationServiceContext”,因此转换应该有效。
有人知道当基类型相同时什么会导致 InvalidCastException 吗?
尽管 CustomerCrmServiceContext
是 OrganizationServiceContext
,但反之则不然,这就是为什么您会得到异常。
演员不能在运行时神奇地改变对象的类型。
通过使用强制转换,您实际上是在告诉编译器 “虽然您认为此对象是 SomeBaseType
,但我知道,在运行时,它始终是 [=13] 的实例=] 所以请这样对待它".
如果在运行时发现对象不是您尝试转换为的类型,您将得到一个 InvalidCastException
,并且 OrganizationServiceContext
不是 CustomerCrmServiceContext
.