我有一个可以接受一系列自定义对象的函数
public static void myFunction(myObject[] myObject){
此列表可包含'n'个对象。我想一次检查每个对象的每个属性,而不知道数组的大小。
例如,我想检查我的所有对象都没有名为'name'的属性,值为'fred',我想做类似的事情:
if(myObject[0] != "fred" || myObject[1] != "fred" || myObject[n] != "fred"){
有一种简单的方法吗?我不想做一个for循环,好像它不等于'fred'那么它会抛出一个错误。
答案 0 :(得分:6)
你听说过LINQ吗?
在我看来,您正在寻找Any
:
if(myObject.Any(o => o.Name == "fred"))
{
// You have an object with the name "fred"...
}
如果您想检查所有对象的名称是否为" fred",您可以使用All
:
if(myObject.All(o => o.Name == "fred"))
{
// all your objects have the name "fred"...
}
答案 1 :(得分:3)
if (myObject.All(o => o.Name != "fred"))
{
// No Fred's found!
}
<强>更新强>
正如Panagiotis Kanavos所提到的,Any
可能是一个更好的解决方案,因为这将在找到匹配时停止迭代。
if (!myObject.Any(o => o.Name == "fred"))
{
// No Fred's found!
}
答案 2 :(得分:1)
我可能会忽略这一点,但数组的大小由其Length
属性给出。
至于做你想做的事情,我认为没有办法做到这一点而不用某种方式迭代它。
答案 3 :(得分:0)
你可以使用while循环,
Continue=true;i=0;
while(continue and i < MyObject.length() ){ if (Myobject[i] != 'fred') continue=false else i++;}
if (!continue) { "throw your exception" }
答案 4 :(得分:0)
使用LINQ:
using System.Linq;
// ....
if(myObject.Any(element => (string)element == "fred"))
{
// do what ever you need to do
}
请注意,当您使用此LINQ表达式时,它只是循环的快捷方式,它等同于创建您自己的Any函数,如下所示:
bool Any(string keyword)
{
foreach (var element in myObject)
{
if(element == keyword)
return true;
}
}