C# 委托中的派生类型功能
我想用签名C# 委托中的派生类型功能,c#,entity-framework,generics,delegates,variance,C#,Entity Framework,Generics,Delegates,Variance,我想用签名Expression Foo()编写一个方法。我的类U继承自T。我希望在此委托中包含特定于U的处理。问题是,T不能隐式转换为U。在这个方法中有没有办法访问特定于U的属性 复杂性:我也有我想要处理的V:T类型,所以我不能仅仅通过在签名中用U替换T来利用差异。一个简单的方法是定义一个T和U都从中继承(使用)的接口。我最后使用了单独的重载:(),(myVar)其中T:U和(myVar,myvar2)其中T:V。这就成功了,我很幸运,因为每个参数都是一个对应于实体属性的应用程序值。听起来好像你
Expression Foo()
编写一个方法。我的类U继承自T。我希望在此委托中包含特定于U的处理。问题是,T不能隐式转换为U。在这个方法中有没有办法访问特定于U的属性
复杂性:我也有我想要处理的V:T类型,所以我不能仅仅通过在签名中用U替换T来利用差异。一个简单的方法是定义一个T和U都从中继承(使用)的接口。我最后使用了单独的重载:(),(myVar)其中T:U和(myVar,myvar2)其中T:V。这就成功了,我很幸运,因为每个参数都是一个对应于实体属性的应用程序值。听起来好像你需要将type
U
中的一些所需功能移动到base typeT
。不幸的是,我不能,因为必须映射非空的鉴别器列在EF:-/中的子级上,为什么不能在方法中将t
显式转换为U
?实体框架不允许隐式转换edm类型。我可以写一些隐式运算符,但我不知道是否还有其他方法。这不会让我仍然必须隐式转换为U才能访问U的字段吗?我有点困惑,是不是代表一个对象,还是代表一个通用对象?是顶级类。我希望能够访问方法中特定于U的属性。如果我添加了一个接口,我仍然必须将T转换为U才能访问U的属性,或者必须使T实现一个共享的U属性,这太过分了,因为T不应该有U属性。