用Android AlertDialog的Func<object, bool>实现返回一个真/假值,而不阻塞UI
我必须在我的Xamarin项目中使用一个功能,该项目具有DoOperation(Func ConfirmOperation)过载.该对象具有称为字符串TextTocheck的属性.该功能应检查此属性,如果符合某些条件,则需要询问用户他是否要继续操作. Func DoOperation(Func ConfirmOperation)调用本身将在Windows.forms中进行类似的Func函数的实现: private bool ConfirmOperation(object Object) { if(Object.TextToCheck == Criteria) { if(MessageBox.Show("MESSAGE", "TITLE", MessageBoxButtons.YesNo) == DialogResult.No) {
4 2024-02-11
编程技术问答社区
C#创建函数队列
我写了一个名为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(a
14 2024-01-09
编程技术问答社区
一直使用Action和Func而不是做相应的委托,这是不是不好的做法?
在我的程序中创建简单的事件时,其他类可以订阅的简单事件,而不是从代表中创建委托并创建事件,我只是用动作或功能创建事件,以避免必须创建委托. 这样做有缺点吗? 解决方案 并非如此,我能想到的唯一缺点是,如果您具有逻辑意图(超出了预期的参数和返回值),则希望用户满足使用通用委托可能会丢失的东西. 例如: public delegate void ClearAllValuesDelegate(MyClass X); // ... ClearAllValuesDelegate myDelegate; vs: Action myDelegate; 在前者中,很明显目的是该动作应清除参考文献中的所有值(尽管当然没有办法执行此功能).而Action只是告诉您需要什么而不是其他.就像我说的那样,这只是一个逻辑上的区别. 但实际上我知道没有很大的缺点.在大多数情况下,当我们使用Func和Action时,
0 2024-01-09
编程技术问答社区
从Moq调用行动
我有一种使用两个Action s的方法,一个用于成功,一个用于失败.每个Action采用包含其他信息的结果参数... void AuthoriseUser(AuthDetails loginDetails, Action onSuccess, Action onFailure); 我正在编写一个取决于该服务的类的单元测试,我想测试此类在onSuccess(...)和onFailure(...)回调中执行正确的操作.这些是私人或匿名方法,那么如何设置模拟服务以调用任何一个操作? 解决方案 您可以使用Callback方法(另请参见 Moq Quick Quick Quick Quick QuickStart 回调部分)要配置使用模拟方法调用的原始参数(AuthoriseUser)的回调,以便您可以在此处调用onSuccess和onFailure回调: var moq = new Mock
4 2024-01-09
编程技术问答社区
封装了Action<T>和Func<T>?
我正在尝试为某种可启用的接口进行设计.我不会详细介绍,但要点是我有几个需要从基类执行的操作.他们可能会采用不同的参数(没什么大不了的),并且可能/可能不会返回值. 到目前为止,这是我的设计: public abstract class ActionBase { // ... snip ... } public abstract class ActionWithResultBase: ActionBase { public abstract T Execute(); } public abstract class ActionWithoutResultBase: ActionBase { public abstract void Execute(); } 到目前为止,我的每个具体动作都必须是从Action Withersultbase或Action Withoutresult Base中的孩子,但我真的不喜欢那样. 如果我可以将执行的定义移
0 2024-01-09
编程技术问答社区
为什么Action/Func比.Net中的普通方法更好?
如果我需要快速重复使用的代码,我更喜欢使用动作或弹药,但是我团队中的其他人不喜欢它们或理解它们. 目前,我唯一的真正论点是关于偏好和更直接的代码实践,但这只是不好的论点. 为什么这样做更好: Action hideControl = (form,name) => { var button = form.GetControl(name); if (button != null) button.Visible = false; } 而不是: public static void HideControl(this FormView form, string name) where T : Control { var button = form.GetControl(name); if (button != null) button.Vi
4 2024-01-09
编程技术问答社区
在设计应用程序时,你如何使用Func<>和Action<>?
我可以找到有关func 和Action 的所有示例简单,如下面的一个,在您看到 中,它们在技术上如何工作,但我想看到它们在示例中使用了它们解决以前无法解决或只能以更复杂的方式解决的问题,即我知道它们是如何工作的,我可以看到它们是 terse and terse and starse and starge ,所以我想从更大的意义上理解它们他们解决了什么样的问题以及如何在应用程序设计中使用它们. 以什么方式(模式)您使用func 和动作来解决实际问题? using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestFunc8282 { class Program { static void Main(string[] args) { //func with delegat
10 2024-01-09
编程技术问答社区
如何将System.Linq.Enumerable.WhereListIterator<int>转换为List<int>?
在下面的示例中,我如何轻松地将eventScores转换为List,以便我可以将其用作prettyPrint? 的参数 Console.WriteLine("Example of LINQ's Where:"); List scores = new List { 1,2,3,4,5,6,7,8 }; var evenScores = scores.Where(i => i % 2 == 0); Action, string> prettyPrint = (list, title) => { Console.WriteLine("*** {0} ***", title); list.ForEach(i => Console.WriteLine(i)); }; scores.ForEach(i => Console.WriteLine(i)); prettyPrint(scores, "
6 2024-01-09
编程技术问答社区
我怎样才能将抛出的东西强行变成一个语句,而不是一个表达式(在lambda表达式中)?
从C#7.0 开始throw关键字既可以用作表达式又是语句,这很不错. 但是,考虑这些过载 public static void M(Action doIt) { /*use doIt*/ } public static void M(Func doIt) { /*use doIt*/ } 当这样调用时 M(() => throw new Exception()); ,甚至喜欢这个(带有语句lambda) M(() => { throw new Exception(); }); 编译器选择M(func )过载,表明此处被认为是表达式. 我如何优雅而有意清晰的迫使编译器选择M(动作)超负荷? 做到这一点的一种方法 M(() => { throw new Exception(); return; }); 但是,返回声明的原因似乎并非很明显,并承担着下一个开发人员更改的风险,尤其是因为Resmanper警告了无法到达的代码. (当然
4 2024-01-09
编程技术问答社区
Action/Func vs Methods, what's point?
我知道如何使用.net in .NET,但是每次我开始使用时,都可以使用常规的旧方法来实现完全相同的解决方案. 当将Action或Func用作我无法控制的东西的参数时,这将排除在外. 基本上我的问题是...为什么存在这些?他们给我什么额外的新方法是什么? 解决方案 我认为这里的其他答案谈论Action/Func是什么及其使用.我将尝试回答如何在Action/Func和方法之间进行选择.差异首先: 1)从原始性能的角度来看,与直接方法调用相比,代表 ,但这是微不足道的,以至于担心它是一种不好的做法. 2)方法可以具有过载(具有不同签名的相同函数名称),但不能具有Action/Func委托,因为它们被称为变量,并且通过C#规则,您不能具有两个变量,带有两个变量给定范围中的同名. bool IsIt() { return 1 > 2; } bool IsIt(int i) { return i > 2; } //legal Func IsIt
0 2024-01-09
编程技术问答社区
手动创建委派与使用动作/函数委派的对比
今天我正在考虑宣布这一点: private delegate double ChangeListAction(string param1, int number); 但是为什么不使用此: private Func ChangeListAction; 或如果ChangeListAction没有回报值,我可以使用: private Action ChangeListAction; 那么,用delegate关键字宣布代表的优势在哪里? 是由于.NET 1.1,并且使用.NET 2.0来Action,并且使用.NET 3.5来Func? 解决方案 优势是清晰度.通过给出类型一个明确的名称,读者更清楚它的作用. 当您编写代码时,它也将为您提供帮助.这样的错误: cannot convert from Func to Func
0 2024-01-09
编程技术问答社区
函数vs.动作vs.谓词
有了真实的例子及其使用,有人可以帮助我理解: 我们什么时候需要一个 Func 委托? 我们什么时候需要我们什么时候需要一个 解决方案 Func和Action之间的区别仅仅是您是否希望代表返回值(使用Func)(使用Action). Func可能最常用于LINQ-例如在投影中: list.Select(x => x.SomeProperty) 或过滤: list.Where(x => x.SomeValue == someOtherValue) 或钥匙选择: list.Join(otherList, x => x.FirstKey, y => y.SecondKey, ...) Action更常用于List.ForEach之类的东西:执行列表中每个项目的给定动作.我的使用频率少于Func,尽管i do 有时将无参数版本用于Control.BeginInvoke和Dispatcher.BeginInvoke. .
2 2024-01-09
编程技术问答社区
一个List<> of Func<>s, 编译时出错的是通用返回类型,但为什么?
这是一个漫长的问题,所以请忍受我. 我需要在一组字符串和每个字符串的相应通用方法之间创建映射.但是,我遇到了一个编译问题,解释了下部. 在我的情况下,我正在使用Dictionary,但是问题同样存在于List.为简单起见,我在下面的示例中使用了List. 考虑这三个类: public abstract class MyBase { /* body omitted */ } public class MyDerived1 : MyBase { /* body omitted */ } public class MyDerived2 : MyBase { /* body omitted */ } 和其他一些类中的方法: public class Test { public T GetT() where T : MyBase { /* body omitted */ } } 在另一堂课中,我可以声明List
2 2024-01-07
编程技术问答社区
如何将一个有多个参数的方法作为另一个方法的参数来传递?
我有多种无法编辑的方法: Public Function Test1(A As Integer, B As String, C As Boolean) As Boolean Public Function Test2(A As Boolean, B As Double) As DataTable Public Function Test3(A As String) As Integer 我开始创建这样的类: Public Class MyWrapperClass Dim _method As Action() Public Sub New(Method As Action()) _method = Method End Sub Public ExecuteFunction() _method() ' And do something with the result
6 2024-01-07
编程技术问答社区
映射 Expression<Func<Type1,bool>> Expression<Func<Type2,bool>>。
我想将查询从业务层传递到服务层,但是在这样做时,我必须将DTO转换为实体模型. 通常,我可以通过自动化器将Type1转换为Type2,但现在我想映射 Expression> to Expression> 我从Automapper遇到了错误 Missing type map configuration or unsupported mapping. Mapping types: Expression`1 -> Expression`1 我该如何实现? 解决方案 我刚刚对您评论的另一个问题更新了答案,我认为这是:选择器类型之间的func automapper 至于您上面发布的错误,这似乎是因为您尝试使用AutoMapper将一种表达式映射到另一种表达式类型,例如Mapper.Map>, Expression
2 2024-01-06
编程技术问答社区
通用表达式的抽象化问题
i具有以下方法SetMapping(),用于使用表达式定义一些映射设置. public class AggregateMap { protected Expression, object>> graphMapping; protected void SetMapping(Expression, object>> mapping) { graphMapping = mapping; } } 示例调用代码: SetMapping(map => map.OwnedCollection(root => root.ChildEntities)); 上面的功能很棒,但是我想通过提供SetOwnedCollectionMapping()来进一步抽象此方法
0 2024-01-06
编程技术问答社区
使用反射来分配Func<Product, object>属性的值
如果我有类产品: public class Product { public string Title { get; set; } public string Make { get; set; } public Decimal Price { get; set; } //(Edit) - Added non-string } 我在另一类中有一个属性,称为: Func SortBy { get; set; } 我可以使用: 设置排序 SortBy = p => p.Title; 但是,如果我将sortby存储为字符串,例如. string sortField = "Title"; SortBy = /*Some reflection using sortField*/; 解决方案 您需要使用var p = Expression.Parameter(typeof(Product)); Sort
2 2024-01-06
编程技术问答社区
Func(Of Tin, Tout)使用带有ByRef参数的lambda表达式会产生不兼容的签名错误
为什么这样做: Private [Function] As Func(Of Double, String) = Function(ByRef z As Double) z.ToString 给出以下错误: 嵌套功能没有与委托字符串兼容的签名)'. 当时: Private [Function] As Func(Of Double, String) = Function(ByVal z As Double) z.ToString 不? (区别是Byref/byval) 此外,我如何实施这样的事情? 解决方案 您正在遇到此错误,因为委托类型函数(byval z as double)为字符串与函数(byref z as d double)不兼容,为字符串.您需要完全匹配. 您也不能用ByRef参数( ref 或 out out of ... of ...) func ,无论您是否使用匿名函数. 但是您可以声明您的委托类型,然后使用匿名函数
10 2024-01-05
编程技术问答社区
使用带有命名参数列表的FluentValidation's WithMessage方法
我正在使用FulentValidation,我想格式化具有某些对象属性值的消息.问题是我在C#中的表达和代表几乎没有经验. FluentValidation已经提供了一种使用格式参数进行此操作的方法. RuleFor(x => x.Name).NotEmpty() .WithMessage("The name {1} is not valid for Id {0}", x => x.Id, x => x.Name); 我想做这样的事情,以避免在更改参数的顺序时必须更改消息字符串. RuleFor(x => x.Name).NotEmpty() .WithMessage("The name {Name} is not valid for Id {Id}", x => new { Id = x.Id, Name = x.Name }); 原始方法签名看起来像这样
8 2024-01-04
编程技术问答社区
请求信息已被发送。不能多次发送同一请求信息
我的代码有什么问题吗?我一直遇到此错误: system.invalidoperationException:已发送请求消息.无法多次发送相同的请求消息. 我的httprequestmessage在一个弹奏内部,所以我认为每次通过func(). public async Task GetAsync(HttpRequestMessage request) { return await RequestAsync(() => request); } public async Task RequestAsync(Func func) { var response = await ProcessRequestAsync(func); if (response.StatusCode == HttpStatusCode.Unauthoriz
8 2024-01-04
编程技术问答社区