C# 检查大小为n的数组中的值,但不检查循环

C# 检查大小为n的数组中的值,但不检查循环,c#,C#,我有一个函数,可以像这样接受一个自定义对象数组 public static void myFunction(myObject[] myObject){ 此列表可以包含“n”个对象。我想一次检查每个对象的每个属性,而不知道数组的大小 例如,我想检查我的对象是否没有一个属性名为“name”,其值为“fred”,我想执行以下操作: if(myObject[0] != "fred" || myObject[1] != "fred" || myObject[n] != "fred"){ 有没有一个简单

我有一个函数,可以像这样接受一个自定义对象数组

public static void myFunction(myObject[] myObject){
此列表可以包含“n”个对象。我想一次检查每个对象的每个属性,而不知道数组的大小

例如,我想检查我的对象是否没有一个属性名为“name”,其值为“fred”,我想执行以下操作:

if(myObject[0] != "fred" || myObject[1] != "fred" || myObject[n] != "fred"){
有没有一个简单的方法可以做到这一点?我不想做一个for循环,如果它不等于'fred',那么它将抛出一个错误。

您可以使用函数

更新:
正如Panagiotis Kanavos提到的,这可能是一个更好的解决方案,因为当找到匹配项时,这将停止迭代

if (!myObject.Any(o => o.Name == "fred"))
{
    // No Fred's found!
}

你听说过林克吗?
在我看来,你在寻找:

如果要检查所有对象是否都有名称“fred”,可以使用
all

if(myObject.All(o => o.Name == "fred"))
{
    // all your objects have the name "fred"...
}

我可能忽略了这一点,但是数组的大小是由它的
Length
属性给出的


至于做你想做的事,我不认为有一种方法可以不经过迭代就完成它。

你可以使用while循环

 Continue=true;i=0;
 while(continue and i < MyObject.length() ){ if (Myobject[i] != 'fred') continue=false else i++;}
 if (!continue) {  "throw your exception" }
Continue=true;i=0;
while(continue和i
使用LINQ:

using System.Linq;

// ....
if(myObject.Any(element => (string)element == "fred"))
{
    // do what ever you need to do
}
请注意,使用此LINQ表达式时,它只是循环的快捷方式,相当于创建自己的任何函数,如下所示:

bool Any(string keyword)
{
    foreach (var element in myObject)
    {
        if(element == keyword)
           return true;
    }
}

请看其他答案:)不过,这并没有错。Any和All都将迭代IEnumerable(在您的例子中是数组),您不需要自己编写循环。什么是“不循环”?没有任何循环或没有自己编写循环?您觉得这种方法比其他给出的解决方案更可读/更可维护/更有效吗?
continue
是跳过当前迭代但仍保持循环顺序的保留关键字。与在All或AnyYea中实现的方法相同,Linq真是太棒了:-)虽然我的答案慢了10秒,但从第一个版本来看是正确的。但是你应该接受Jerodev的回答,他需要比我多15点的重复。哈哈,这是真的,但是,我确实需要使用。我需要检查的是数组中没有任何对象包含stringNo,你需要
如果(!Any(…)
。你能详细说明区别吗?使用
All()
将迭代直到找到假谓词(并返回false)或整个
IEnumerable
(并返回true),而使用
Any()
将迭代直到找到真谓词(并返回true)或整个
IEnumerable
(并返回false)。因此
如果(!myObject.Any(o=>i.Name==“fred”)
基本上与
if(myObject.All(o=>i.Name=!“fred”)
相同。所有和任何都做不同的事情,它们是不可互换的,这不仅仅是一个优化的例子。@LasseVågsætherKarlsen我不确定你是否正确。
!Any(条件)
所有(!条件)是一样的
-但它更优化、更可读。
任何
都比这更高级,因为它允许任何参数,而不仅仅是字符串。你可以检查它。@默认设置我知道我只是想简单地说明循环的意义
using System.Linq;

// ....
if(myObject.Any(element => (string)element == "fred"))
{
    // do what ever you need to do
}
bool Any(string keyword)
{
    foreach (var element in myObject)
    {
        if(element == keyword)
           return true;
    }
}