首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将作为对象的泛型类转换为其类型

将作为对象的泛型类转换为其类型
EN

Stack Overflow用户
提问于 2014-04-10 15:57:48
回答 1查看 70关注 0票数 0

这是一个与泛型相关的类层次结构问题。我有一个主要派生的类MyClass3<T>,它是从MyClass2<T>派生的。类MyClass2<T>有一个名为MyProperty的属性。

我有一个方法VerifyMyProperty,它接受MyClass3类型的对象。因为它是通用的,所以它可以是MyClass3<A> or MyClass3<B> or MyClass3<C>

我的问题是,如何将MyClass3转换为MyClass2来检查属性MyProperty?没有泛型,就像var myClass2 = anyofMyClass as MyClass2一样简单。对于泛型,T可以是A,B或C,我怎么能做同样的铸造呢?

代码语言:javascript
复制
public class MyClass3<T> : MyClass2<T>
{
....
}

public class MyClass2<T> : MyClass1
{
    T MyProperty { get; private set; }
}

public void VerifyMyProperty(object anyofMyClass)
{
    var myClass2 = anyofMyClass as MyClass2; // Finding the MyClass2. This line will return a compiler error.

    if (myClass2.MyProperty != null)
    {
       Console.Writeline("MyClass2.MYProperty is not null.");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 16:05:56

首先:在您的示例中,MyClass2不存在。只有MyClass<T>是一个有效的类。

所以你可以考虑:

var myClass2 = anyofMyClass as MyClass2<T>;

如果anyOfMyClass必须能够包含另一个泛型类型的MyClass2,则会出现问题。

您可能需要考虑一个具有以下属性的通用通用接口的实现:

代码语言:javascript
复制
interface IMyInterface
{
    object MyProperty { get; }
}

public class MyClass2<T> : MyClass1, IMyInterface
{
    T MyProperty { get; private set; }
    object IMyInterface.MyProperty { get { return MyProperty; }}
}

当您显式地实现这个接口时(请参阅:http://msdn.microsoft.com/en-us/library/aa664591(v=vs.71).aspx ),您可以以非一般的方式解决您的问题:

代码语言:javascript
复制
var myClass2 = anyofMyClass as IMyInterface;
if (myClass2.MyProperty != null)
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22993094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档