Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 委托中的派生类型功能_C#_Entity Framework_Generics_Delegates_Variance - Fatal编程技术网

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 type
T
。不幸的是,我不能,因为必须映射非空的鉴别器列在EF:-/中的子级上,为什么不能在方法中将
t
显式转换为
U
?实体框架不允许隐式转换edm类型。我可以写一些隐式运算符,但我不知道是否还有其他方法。这不会让我仍然必须隐式转换为U才能访问U的字段吗?我有点困惑,是不是代表一个对象,还是代表一个通用对象?是顶级类。我希望能够访问方法中特定于U的属性。如果我添加了一个接口,我仍然必须将T转换为U才能访问U的属性,或者必须使T实现一个共享的U属性,这太过分了,因为T不应该有U属性。