C# 作为函数的委托

C# 作为函数的委托,c#,delegates,C#,Delegates,下面的函数工作正常,但我想让它简单 if (list.Exists(delegate(string s) { return s.Contains(str); })) { string name = list.Find(delegate(string s) { return s.Contains(str); }); } 我正在使用委托(字符串s){returns.Contains(str);} 有两种方法可以让这变得简单。 我知道如何创建委托,但不知道如何使用它 //create

下面的函数工作正常,但我想让它简单

if (list.Exists(delegate(string s) { return s.Contains(str); }))
{
    string name = list.Find(delegate(string s) { return s.Contains(str); });
}
我正在使用委托(字符串s){returns.Contains(str);} 有两种方法可以让这变得简单。 我知道如何创建委托,但不知道如何使用它

    //create delegate       
    public delegate bool nameExistsDelegate(List<string> list, string name);

    // Create a method for a delegate.
    public static bool IsnameExists(List<string> list, string name)
    {
        return list.Exists(delegate(string s) { return s.Contains(name) ; });
    }

    // Create a method for a delegate.
    public static string GetName(List<string> list, string name)
    {
        return list.Find(delegate(string s) { return s.Contains(name) ; });
    }
//创建委托
公共委托bool name existsdelegate(列表、字符串名称);
//为委托创建一个方法。
公共静态bool IsnameExists(列表、字符串名称)
{
return list.Exists(委托(字符串s){return s.Contains(名称);});
}
//为委托创建一个方法。
公共静态字符串GetName(列表,字符串名称)
{
return list.Find(委托(字符串s){return s.Contains(名称);});
}
更新


坚持使用.NET2.0,因此我无法使用LINQ。如果您使用的是.NET3.5,则可以使用lamdas

 //create delegate       
    public delegate bool nameExistsDelegate(List<string> list, string name);

    static Func<string, bool> exists = s =>  return s.Contains(name);

    // Create a method for a delegate.
    public static bool IsnameExists(List<string> list, string name)
    {
        return list.Exists(s => exists(s));
    }

    // Create a method for a delegate.
    public static string GetName(List<string> list, string name)
    {
        return list.Find(s => exists(s));
    }
//创建委托
公共委托bool name existsdelegate(列表、字符串名称);
static Func exists=s=>返回s.Contains(名称);
//为委托创建一个方法。
公共静态bool IsnameExists(列表、字符串名称)
{
return list.Exists(s=>Exists(s));
}
//为委托创建一个方法。
公共静态字符串GetName(列表,字符串名称)
{
return list.Find(s=>exists(s));
}

编译器将您使用的匿名方法转换为
谓词
委托。考虑到这一点,您可以引入一个本地服务器来消除您不想要的冗余

Predicate<string> containsStr = delegate(string s) { return s.Contains(str); };

if (list.Exists(containsStr))
{
   string name = list.Find(containsStr);
   ...
}

当然,我还应该指出,字符串中除了存在的字符外,不包含任何额外的元数据,因此在列表中“查找”字符串而不仅仅是证明它的存在(除非您指的是
FindIndex
)。

我建议您阅读C中的标准委托类型#

这里实际上需要一个谓词,它接收一个对象,用一些条件测试它,并返回一个通过/失败的结果

Predicate<string> containsCheck = item = > item.Contains(str);
if (list.Exists(containsCheck)
{
    string name = list.Find(containsCheck);
}
Predicate containsCheck=item=>item.Contains(str);
if(list.Exists)(containsCheck)
{
字符串名称=list.Find(containsCheck);
}
注意:所有代码也可以使用LINQ完成,这相当简单。但我想您现在一定在学习委托..JFYI

using System.Linq;
...
Predicate<string> substringCheck = item => item.Contains(str);
            var exists = list.Any(substringCheck);
            var getMatch = list.First(substringCheck);
使用System.Linq;
...
谓词substringCheck=item=>item.Contains(str);
var exists=list.Any(子字符串检查);
var getMatch=list.First(子字符串检查);
Predicate<string> containsCheck = item = > item.Contains(str);
if (list.Exists(containsCheck)
{
    string name = list.Find(containsCheck);
}
using System.Linq;
...
Predicate<string> substringCheck = item => item.Contains(str);
            var exists = list.Any(substringCheck);
            var getMatch = list.First(substringCheck);