检查大小为n的数组是否为值而不循环

时间:2018-01-31 10:47:56

标签: c#

我有一个可以接受一系列自定义对象的函数

public static void myFunction(myObject[] myObject){

此列表可包含'n'个对象。我想一次检查每个对象的每个属性,而不知道数组的大小。

例如,我想检查我的所有对象都没有名为'name'的属性,值为'fred',我想做类似的事情:

if(myObject[0] != "fred" || myObject[1] != "fred" || myObject[n] != "fred"){

有一种简单的方法吗?我不想做一个for循环,好像它不等于'fred'那么它会抛出一个错误。

5 个答案:

答案 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)

您可以使用All使用LINQ功能。

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;
    }
}