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