C# 如何优化下面的代码
如何优化下面的代码,下面的代码包含一个对象数组,该数组可能具有不同类型的类对象。我想换个箱子,而不是如果……否则。。。我怎么能做到呢C# 如何优化下面的代码,c#,optimization,C#,Optimization,如何优化下面的代码,下面的代码包含一个对象数组,该数组可能具有不同类型的类对象。我想换个箱子,而不是如果……否则。。。我怎么能做到呢 object[] emailObjs; for (int i = 0; i < emailObjs.Length; i++) { if (emailObjs[i] != null) { if (emailObjs[i] is Rfq) { } else if (emailObjs[i] is
object[] emailObjs;
for (int i = 0; i < emailObjs.Length; i++)
{
if (emailObjs[i] != null)
{
if (emailObjs[i] is Rfq)
{
}
else if (emailObjs[i] is RfqBid)
{
}
else if (emailObjs[i] is RfqProjManager)
{
}
}
}
object[]emailObjs;
for(int i=0;i
在带有类型检查的开关
语句中使用:
switch (emailObjs[i])
{
case Rfq r:
{
// use r;
break;
}
case RfqBid r:
{
// use r;
break;
}
}
虽然这将显著压缩代码,但在性能方面,它不会比一堆
if
语句(如示例代码中的语句)有多大好处。使用一种方法为所有3个类定义公共接口:
public interface IRfq
{
void DoSomething();
}
public class Rfq : IRfq
{
public void DoSomething()
{
//...
}
}
public class RfqBid : IRfq
{
public void DoSomething()
{
//...
}
}
public class RfqProjManager : IRfq
{
public void DoSomething()
{
//...
}
}
您可以在for循环中执行一个调用
IRfq[] emailObjs;
for (int i = 0; i < emailObjs.Length; i++)
{
emailObjs[i]?.DoSomething();
}
IRfq[]emailObjs;
for(int i=0;i
以下是我的尝试:
Rfq、RfqBid和RfqProjManager实现相同的接口。我们称之为IRfq
interface
{
void DoSomeWork();
}
然后,您的for循环可以如下所示:
for (int i = 0; i < emailObjs.Length; i++)
{
if (emailObjs[i] != null && emailObjs is IRfq)
{
((IRfq)emailObjs[i]).DoSomeWork();
}
}
for(int i=0;i
你的设计有可能吗 但是你的
else如果s什么都不做……C#7.0中有一个新特性:带模式的Switch语句。您可以在C#7.0中执行切换emailObjs[i]{case Rfq r:…case RfqProjManager rpm:…
您可以在C#7.0中执行此操作。如果顺序不重要,您可以使用foreach(emailObjs.OfType()中的var obj)//做点什么
这是至少几十个其他问题的重复,你的研究表明了什么?而且,一般来说,当你需要它时,这是一种设计的味道。这段代码到底应该做什么?如果他们想对所有对象调用DoSomething()
,而它还没有定义该方法的基类。“你的设计有可能吗?”-然后先发表评论问这个问题,而不是在回答中猜测。是的,我知道,但这并不意味着你应该发表答案……无论如何,你现在有50个声誉。谢谢你的建议(和声誉)。下次我会做得更好。