Tag: 代表

C#generics委托类型推断

为什么C#编译器不能在指定的示例中将T推断为int? void Main() { int a = 0; Parse(“1”, x => a = x); // Compiler error: // Cannot convert expression type ‘int’ to return type ‘T’ } public void Parse(string x, Func setter) { var parsed = …. setter(parsed); }

按代码排序列表,然后按名称排序

我有一个对象列表。 我通过写这行来按代码对此列表进行排序: Result.Sort(delegate(Position p1, Position p2) { return p1.Code.CompareTo(p2.Code); }); 但是我想首先通过Code然后按名称对此行进行排序。 我该怎么做?

委托与params关键字匹配任何方法?

我正在努力完成以下事情: public delegate void SomeMethod(params object[] parameters); 那是我的代表。 我有一些方法将运行此SomeMethod委托(无论传递什么)并返回执行的时间跨度。 public TimeSpan BenchmarkMethod(SomeMethod someMethod, params object[] parameters) { DateTime benchmarkStart = DateTime.Now; someMethod(parameters); DateTime benchmarkFinish = DateTime.Now; return benchmarkFinish – benchmarkStart; } 我也有一些方法: public abstract void InsertObjects (Company c); 所以,我宣布: SomeMethod dlg = new SomeMethod(InsertObjects); TimeSpan executionTime = BenchmarkMethod(dlg, c); 但它没有运行,说’InsertObjects’没有重载匹配委托’TestFactory.MeasuringFactory.SomeMethod’。 有没有办法做到这一点?或者我应该改变我的所有方法来接受params对象[]作为参数?

foreach中匿名委托的问题

public Form1() { InitializeComponent(); Collection tests = new Collection(); tests.Add(new Test(“test1”)); tests.Add(new Test(“test2”)); foreach (Test test in tests) { Button button = new Button(); button.Text = test.name; button.Click+=new EventHandler((object obj, EventArgs arg)=>{ this.CreateTest(test); }); this.flowLayoutPanel1.Controls.Add(button); } } public void CreateTest(Test test) { MessageBox.Show(test.name); } } 当我点击按钮女巫文本是’test1’时,消息框将显示’test2’,但我的期望是’test1’。 那么,有人请告诉我代码的原因或错误。

为什么使用Delegate.Combine需要强制转换但使用+运算符不?

我在Delegate或MulticastDelegate下的Reflector中找不到+运算符。 我想弄清楚这不需要演员如何: Action a = () => Console.WriteLine(“A”); Action b = () => Console.WriteLine(“B”); Action c = a + b; 但这样做: Action a = () => Console.WriteLine(“A”); Action b = () => Console.WriteLine(“B”); Action c = (Action)MulticastDelegate.Combine(a, b); 在第一个样品中是刚刚在封面下完成的铸造?

我可以通过C#中的代理取消方法吗?

如果我在“处理”动画屏幕中按取消,我想立即停止一个方法。 我通过代理使用异步调用。 是否可以通过委托立即停止执行该方法? 谢谢 :)

检查方法与给定Delegate的兼容性?

在C#代码中,如何检查给定方法是否可以由特定委托类型表示? 我首先根据我的类型知识尝试了一些东西: // The delegate to test against. void TargetDelegate(string msg); // and… var methodInfo = Type.GetMethod(..); // obtain the MethodInfo instance. // try to test it typeof(TargetDelegate).IsAssignableFrom(methodInfo.GetType()); 但这只涉及类型而不是方法 – 它总是错误的。 我倾向于相信答案在于Delegate类型,但我现在只是在FCL游荡。 任何帮助,将不胜感激。

将Action 转换为Func 的最佳方法是什么?

我的class上有两个带有这个签名的函数, public static TResult Execute(Func remoteCall); public static void Execute(Action remoteCall) 如何将第二种方法中的同一委托传递给第一种方法? 使用Delegate参数创建方法不是一种方法,因为我丢失了一些exception信息 非常感谢!

将var转换为c#中的List

我无法将var转换为List 。 private void PopulateChart(List rawData) { var groupedByCategory1 = rawData.GroupBy(co => co.Category1) //List data = groupedByCategory1.GroupBy(co => co.Category1).ToList(); } 注意:从rawData我必须得到Groupby数据。 再次使用该结果我必须对数据进行分组。

在没有委托变量支持的情况下使用事件有利于哪些情况?

我正在阅读Jon Skeet撰写的这篇文章, 这是我深入了解代表和事件的一部分。 在文章中,他演示了一个没有委托变量支持的事件,并声明…… …有时您不希望使用简单的委托变量来支持事件。 例如,在有大量事件但只有少数事件可能被订阅的情况下,您可以从描述事件的某个键到当前处理它的委托的映射。 这就是Windows Forms所做的 – 它意味着你可以拥有大量的事件,而不会浪费大量内存和变量,这些变量通常只有空值。 我不完全明白他在说什么。 有人可以充实这些例子吗? 例如,他的意思是“从描述事件的某个键映射到当前处理它的代理”? Windows Forms如何做到这一点? 谢谢!