首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较对象与类

比较对象与类
EN

Stack Overflow用户
提问于 2018-03-21 16:00:57
回答 3查看 83关注 0票数 0

我正在尝试将作为对象传递的类类型与方法所在的另一侧的类类型进行比较。

我该怎么做?

到目前为止我有这个。

一方:

代码语言:javascript
运行
复制
TechToday techToday = new TechToday();
SoftwareRevolution softwareRevolution = new SoftwareRevolution();

Subcriber s1 = new Subcriber();
s1.Subcribe(techToday);
s1.Subcribe(softwareRevolution);

另一方:

代码语言:javascript
运行
复制
class Subcriber
{
    TechToday tt = new TechToday();
    SoftwareRevolution sr = new SoftwareRevolution();

    public void Subcribe(Object s)
    {
        if(s==tt)
            new ConsoleObserver(s);
        else                
            new ConsoleOutput(s);

    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-21 16:03:31

您可以使用is操作符来检查对象是否属于特定类型,如:

代码语言:javascript
运行
复制
if(s is TechToday)
        new ConsoleObserver(s);

或者你可以做这样的事情:

代码语言:javascript
运行
复制
if(s.GetType() == typeof(TechToday))

如果要对对象执行相等的操作,则需要首先检查对象的类型,然后将引用转换为该特定类型,然后检查是否相等,如下所示:

代码语言:javascript
运行
复制
if(s is TechToday)
{
   TechToday tt2 = s as TechToday;
   if(tt2 == tt)
       new ConsoleObserver(tt2);
}

或者你也可以这样做:

代码语言:javascript
运行
复制
TechToday tt2 = s as TechToday;
if(tt2 == tt)
    new ConsoleObserver(tt2);

另一个选项是使用C# 7模式匹配的新特性:

代码语言:javascript
运行
复制
if (s is TechToday tt2)
{
   if(tt2 == tt)
      new ConsoleObserver(tt2);
}
票数 4
EN

Stack Overflow用户

发布于 2018-03-21 16:11:53

如果可能的话,我建议使用超载:

代码语言:javascript
运行
复制
class Subcriber
{
    public void Subcribe(TechToday s)
    {
        new ConsoleObserver(s);
    }

    public void Subcribe(SoftwareRevolution s)
    {               
        new ConsoleOutput(s);
    }

}

如果您必须在object的签名中使用Subscribe,那么您可能需要使用

代码语言:javascript
运行
复制
if( s is TechToday ) { new ConsoleObserver(s); }

但是毕竟,这并没有多大意义,因为实际上,创建的对象在离开Subscribe后将立即超出作用域。

票数 2
EN

Stack Overflow用户

发布于 2018-03-21 16:11:20

您可以使用is操作符:

代码语言:javascript
运行
复制
class Subcriber
{
    public void Subcribe(Object s)
    {
        if(s is TechToday)
            new ConsoleObserver(s);
        else                
            new ConsoleOutput(s);

    }
}

然而,使用"as“可能更好:

代码语言:javascript
运行
复制
class Subcriber
{
    public void Subcribe(Object s)
    {
        var tt = s as TechToday; 
        if(tt!=null)
           // unlike above 
           // value passed to ConsoleObserver is TechToday
           // casted already

            new ConsoleObserver(tt); 
        else                
            new ConsoleOutput(s);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49411137

复制
相关文章

相似问题

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