Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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#_Casting - Fatal编程技术网

C# 使用“";作为「;关键字返回空值

C# 使用“";作为「;关键字返回空值,c#,casting,C#,Casting,以下是我的课程定义: public abstract class AbstractEntity : ... public partial class AbstractContactEntity : AbstractEntity, ... public sealed class EntityCollectionProxy<T> : IList<T>, System.Collections.IList where T : AbstractEntity 公共抽象类Abstr

以下是我的课程定义:

public abstract class AbstractEntity : ...
public partial class AbstractContactEntity : AbstractEntity, ...
public sealed class EntityCollectionProxy<T> : IList<T>, System.Collections.IList 
where T : AbstractEntity
公共抽象类AbstractEntity:。。。
公共部分类AbstractContactEntity:AbstractEntity。。。
公共密封类EntityCollectionProxy:IList,System.Collections.IList
其中T:AbstractEntity
现在我从一个委托中得到一个对象,我想强制转换它,但它并没有像我期望的那样工作

var obj = resolver.DynamicInvoke (this.entity);
var col = obj as EntityCollectionProxy<AbstractEntity>;
var obj=resolver.DynamicInvoke(this.entity);
var col=obj作为EntityCollectionProxy;
obj
属于
EntityCollectionProxy
类型

但是
col
为空。 如果我尝试常规强制转换(var col=
(Entity…)obj
),我会得到一个异常

我希望它能工作,因为类型是连贯的。
我错过了什么?

它们不是相同的类型。这与
列表
列表
相同:它们也不能相互转换。
AbstractContactEntity
是一个
AbstractEntity
不会改变这一点。 从
EntityCollectionProxy
提取接口并使其运行也不起作用,因为您想要实现
IList
,这意味着您有
t
类型的输入参数和返回值,以防止协方差

唯一可行的解决方案是:

var tmp = (EntityCollectionProxy<AbstractContactEntity>)obj;
var col = tmp.Select(x => (AbstractEntity)x);
这假设您的
EntityCollectionProxy
类有一个接受
IEnumerable
的构造函数

但请注意,这将是一个新实例,与解析程序返回的实例不同。DynamicInvoke

您能找到一个与我的问题相同的问题吗?我的问题是我不知道泛型类型
t
,所以我不能像我说的那样执行它
(obj as List)。选择(x=>(AbstractEntity)x)
但我想这不是最好的方法乔纳斯:我认为这也行不通。您可以执行以下操作:
var col=(obj作为IEnumerable.Cast()
var result = new EntityCollectionProxy<AbstractEntity>(col);