有人能为这三位最重要的代表提供一个很好的解释(希望有例子):
C#开发人员应该注意哪些其他代表?
您多久在生产代码中使用它们?
我试图在任务上设置公寓状态但是看不到这样做的选项.有没有办法使用任务执行此操作?
for (int i = 0; i < zom.Count; i++)
{
Task t = Task.Factory.StartNew(zom[i].Process);
t.Wait();
}
Run Code Online (Sandbox Code Playgroud) 我已经编写了10年的C#代码,但是我确切地知道何时使用接口而不是使用Func或Action是非常弱的.在我看来,在调用接口上的方法的许多地方,Func或Action也可以正常工作.所以,我猜我的问题是这个.如果我有一个只有一个方法的接口,或者可能有几个方法,那么使用Func或Action是否有任何不利之处?使用Func或Action对我来说似乎更清晰.
非常感谢.
我们知道"Action,Func和Predicate是预定义的通用委托.因此,作为委托,他们可以指向具有指定签名的函数."
我有以下数据访问方案,其中Func<T,R>
有助于avoiding a foreach loop
调用方法.方法2没有循环.这Func<T,R>
有助于避免循环.
泛型委托的其他方案是什么,它可以节省大量的代码行?
参考
码
方法1
public class MyCommonDAL
{
public static IEnumerable<IDataRecord> ExecuteQueryWithTextCommandType(string commandText, List<SqlParameter> commandParameters)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = commandText;
command.CommandTimeout = 0;
command.Parameters.AddRange(commandParameters.ToArray());
connection.Open();
using (var rdr = command.ExecuteReader())
{
while (rdr.Read())
{
yield return rdr;
} …
Run Code Online (Sandbox Code Playgroud) 我试图理解Action<T>, Func<T> and Predicate<T>
代表之间的差异,作为我的WPF/MVVM学习的一部分.
我知道Action<T> and Func<T>
两个都是零到一个+参数,只Func<T>
返回一个值,而Action<T>
不是.
至于Predicate<T>
- 我不知道.
因此,我提出了以下问题:
Predicate<T>
办?(欢迎举例!)Action<T>
返回,那么使用它会不会更简单?(或任何其他类型,如果我们正在讨论.)void
Func<T>
我希望你在问题中避免使用LINQ/List示例.
我已经看过那些了但是它们只是让它变得更加混乱,因为让我对这些代表"感兴趣"的代码与它无关(我想!).
因此,我想使用我熟悉的代码来获得我的答案.
这里是:
public class RelayCommand : ICommand
{
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
[DebuggerStepThrough]
public bool CanExecute(object parameters)
{
return …
Run Code Online (Sandbox Code Playgroud) 我写了一个名为QueueManager的类:
class QueueManager
{
Queue functionsQueue;
public bool IsEmpty
{
get
{
if (functionsQueue.Count == 0)
return true;
else
return false;
}
}
public QueueManager()
{
functionsQueue = new Queue();
}
public bool Contains(Action action)
{
if (functionsQueue.Contains(action))
return true;
else
return false;
}
public Action Pop()
{
return functionsQueue.Dequeue() as Action;
}
public void Add(Action function)
{
functionsQueue.Enqueue(function);
}
public void Add(Func<CacheObject,Boolean> function)
{
functionsQueue.Enqueue(function);
}
Run Code Online (Sandbox Code Playgroud)
当我创建这个类的实例并调用Add方法时,它适用于没有参数的函数,例如:functionQueue.Add(Method); ,但是在调用具有参数和返回值的方法时(在我的情况下,ClassType作为参数,并且Boolean作为返回值),例如functionQueue.Add(Method2(classObject)); 它不编译,我错过了什么?
最近我想对服务调用列表实施健康检查。它们都是异步任务(例如Task<IHttpOperationResponse<XXX_Model>> method_name(...)
我想将它们全部放入一个列表中。我遵循了这篇文章的答案:Storing a list ofmethods in C#但是,它们是异步方法。
我是这样说的:异步方法的集合
List<Action> _functions = new List<Action> {
() => accountDetailsServiceProvider.GetEmployer(EmployerId),
() => accountServiceProvider.GetAccountStatus(EmployerId)
}
Run Code Online (Sandbox Code Playgroud)
有人可以指导我正确的方法来实现将异步方法放入列表中并迭代调用它们吗?
提前致谢!
我是 C# 的初学者,只是一个关于 C# 中 Predicate 和 Func 委托之间差异的问题
我们知道:
public delegate bool Predicate<in T>(T obj);
public delegate TResult Func<in T, out TResult>(T arg);
Run Code Online (Sandbox Code Playgroud)
所以如果我喜欢
Func<Product, bool> firstdelegate = ...
Run Code Online (Sandbox Code Playgroud)
和
Predicate<Product> secondpredicate = ...
Run Code Online (Sandbox Code Playgroud)
他们不一样吗?我的意思是他们都做同样的事情,那么为什么在 LINQ 的 Where() 方法中采用 Func 类型委托而不是 Predicate 呢?