C#中的Foreach(currentScope中的类变量)
本文关键字:类变量 currentScope 中的 Foreach | 更新日期: 2023-09-27 18:30:03
在C#中,是否可以在一个范围内声明类的各种实例,然后使用foreach
循环处理它们?
示例:
void generateInstances()
{
myClass element1 = new myClass();
myClass element2 = new myClass();
myClass element3 = new myClass();
foreach (myClass e in currentScope)
{
e.doSomething();
}
}
正如大家所说,您必须使用集合来实现这一点,例如:
void generateInstaces()
{
myClass element1 = new myClass();
myClass element2 = new myClass();
myClass element3 = new myClass();
var myCollection = new List<myClass>{ element1, element2, element3 };
foreach (myClass e in myCollection)
{
e.doSomething();
}
}
或者您可以从方法的参数接收集合
void generateInstaces(IList<myClass> myCollection)
{
foreach (myClass e in myCollection)
e.doSomething();
}
我认为这是可能的。
下面是code architecture
。。
public class DemoClass
{
//static List<DemoClass> _currentList = null;
static List<DemoClass> _currentList = new List<DemoClass>();
static bool _isScopeStarted = false;
public DemoClass()
{
if (_isScopeStarted)
{
_currentList.Add(this);
}
}
public int a { get; set; }
public int b { get; set; }
public static IEnumerable<DemoClass> ScopeObjects
{
get
{
return _currentList;
}
}
public int Sum()
{
return a + b;
}
public static void StartScope()
{
//_currentList = new List<DemoClass>();
_isScopeStarted = true;
}
public static void EndScope()
{
//_currentList = null;
_isScopeStarted = false;
_currentList = new List<DemoClass>();
}
现在unit testing
部分
class Program
{
static void Main(string[] args)
{
//When no scope defined
DemoClass alone1 = new DemoClass();
DemoClass alone2 = new DemoClass();
Console.WriteLine(DemoClass.ScopeObjects.Count());
//When scope is defined
DemoClass.StartScope();
DemoClass demo1 = new DemoClass { a = 10, b = 20 };
DemoClass demo2 = new DemoClass { a = 11, b = 22 };
Console.WriteLine(DemoClass.ScopeObjects.Count());
//Here is your for each
foreach (var item in DemoClass.ScopeObjects)
{
Console.WriteLine(item.Sum());
}
DemoClass.EndScope();
Console.ReadKey();
}
@Tiziano
检查它是否适合您的curiosity
满意的
我认为这是不可能的。
您必须先将对象添加到集合中,然后在集合上进行foreach循环。
在一个列表中可以有很多这样的实例:
void generateInstaces()
{
List<myClass> elements = new List<myClass>();
for (int i = 0; i < 100; i ++)
elements.Add(new myClass());
foreach (myClass e in elements)
{
e.doSomething();
}
}
根据你的评论,你可以做:
void generateInstaces()
{
List<myClass> elements = new List<myClass>();
elements.Add(new myClass(1, "99a"));
elements.Add(new myClass(17, "hta"));
elements.Add(new myClass(9, "fff"));
foreach (myClass e in elements)
{
e.doSomething();
}
}
如果所有实例都属于同一类,即"myClass",则u可以创建该类类型的列表。
然后将所有实例添加到此列表中,如:
void generateInstaces()
{
List<myClass> myClassList = new List<myClass>();
myClass element1 = new myClass();
myClass element2 = new myClass();
myClass element3 = new myClass();
myClassList.add(element1);
myClassList.add(element2);
myClassList.add(element3);
foreach (myClass mc in myClassList)
{
mc.doSomething();
}
}
如果所有实例都属于同一类,即"myClass",则这是可能的。
如果实例是不同的类,那么您需要创建一个对象类型列表,如下所示:
void generateInstaces()
{
List<object> myClassList = new List<object>();
FirstClass element1 = new FirstClass();
SecondClass element2 = new SecondClass();
ThirdClass element3 = new ThirdClass();
myClassList.add(element1);
myClassList.add(element2);
myClassList.add(element3);
foreach (object mc in myClassList)
{
if(mc.GetType() == "FirstClass")
{
//Do something
}
else if(mc.GetType() == "SecondClass")
{
//Do something
}
else if(mc.GetType() == "ThirdClass")
{
//Do something
}
}
}