我正在尝试将作为对象传递的类类型与方法所在的另一侧的类类型进行比较。
我该怎么做?
到目前为止我有这个。
一方:
TechToday techToday = new TechToday();
SoftwareRevolution softwareRevolution = new SoftwareRevolution();
Subcriber s1 = new Subcriber();
s1.Subcribe(techToday);
s1.Subcribe(softwareRevolution);另一方:
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);
}
}发布于 2018-03-21 16:03:31
您可以使用is操作符来检查对象是否属于特定类型,如:
if(s is TechToday)
new ConsoleObserver(s);或者你可以做这样的事情:
if(s.GetType() == typeof(TechToday))如果要对对象执行相等的操作,则需要首先检查对象的类型,然后将引用转换为该特定类型,然后检查是否相等,如下所示:
if(s is TechToday)
{
TechToday tt2 = s as TechToday;
if(tt2 == tt)
new ConsoleObserver(tt2);
}或者你也可以这样做:
TechToday tt2 = s as TechToday;
if(tt2 == tt)
new ConsoleObserver(tt2);另一个选项是使用C# 7模式匹配的新特性:
if (s is TechToday tt2)
{
if(tt2 == tt)
new ConsoleObserver(tt2);
}发布于 2018-03-21 16:11:53
如果可能的话,我建议使用超载:
class Subcriber
{
public void Subcribe(TechToday s)
{
new ConsoleObserver(s);
}
public void Subcribe(SoftwareRevolution s)
{
new ConsoleOutput(s);
}
}如果您必须在object的签名中使用Subscribe,那么您可能需要使用
if( s is TechToday ) { new ConsoleObserver(s); }但是毕竟,这并没有多大意义,因为实际上,创建的对象在离开Subscribe后将立即超出作用域。
发布于 2018-03-21 16:11:20
您可以使用is操作符:
class Subcriber
{
public void Subcribe(Object s)
{
if(s is TechToday)
new ConsoleObserver(s);
else
new ConsoleOutput(s);
}
}然而,使用"as“可能更好:
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);
}
}https://stackoverflow.com/questions/49411137
复制相似问题