Tag: 方法

如何将方法名称传递给另一个方法并通过委托变量调用它?

我有一个方法,包含指向另一个类的委托变量。 我想通过此委托调用该类中的方法,但将方法的名称作为字符串传递给包含委托的方法。 如何才能做到这一点? 用reflection? Func ? 编辑: 我现在明白,反思可能不是最好的解决方案。 这就是我所拥有的: private static void MethodContainingDelegate(string methodNameInOtherClassAsString) { _listOfSub.ForEach(delegate(Callback callback) { //Here the first works, but I want the method to be general and // therefore pass the method name as a string, not specfify it. callback.MethodNameInOtherClass(); //This below is what I am trying to get to work. […]

WinFormsmultithreading:仅在前一个更新完成后才执行GUI更新

我有multithreading应用程序和一些后台处理。 它具有长时间运行的UI更新 (在UI线程本身上),它们通过MSDN上的知名资源从后台线程调用。 我无法缩短这些UI更新,因为它们最终在外部库中完成(1)。 现在,从该后台线程, 我想在UI线程上异步调用(使用BeginInvoke() )这些更新,但前提是尚未完成上一次更新。 如果没有,我想简单地跳过此更新。 这将防止Windows消息队列溢出,以防调用比调用方法能够执行的速度快。 我目前的解决方案是:在UI线程上执行的方法中,我进入并退出ReaderWriterLockSlim实例。 在后台线程上,我尝试以零超时进入实例。 成功后,我调用’BeginInvoke()’然后再次退出。 如果不成功,我会完全跳过方法调用。 public void Update(double x, double y) { _updateLock.EnterWriteLock(); try { //…long running task… } finally { _updateLock.ExitWriteLock(); } } //…. void Provider_PositionChanged(object sender, SpecialEventArgs e) { if (_updateLock.TryEnterWriteLock(0)) //noone is currently executing an update? { try { myUiControl.BeginInvoke(/*…*/); } finally { _updateLock.ExitWriteLock(); […]

是否可以显示所有方法及其访问修饰符?

我正在对一些大类库进行代码审查,我想知道是否有人知道一种简单易行的方法来生成所有方法(也可能是属性/变量)及其访问修饰符的列表。 例如,我想要这样的事情: private MyClass.Method1() internal MyClass.Method2() public MyOtherClass.Method1() 有点像C ++头文件,但对于C#。 这会将所有内容放在一个地方以便快速查看,然后我们可以调查某些方法是否真的需要标记为内部/公共。

使用“ref”键将“引用类型”作为参数传递给方法是否有意义?

可能重复: C#:参考类型变量的“ref”有什么用? 嗨, 使用“ref”键将“引用类型”作为参数传递给方法是否有意义? 或者它只是废话,因为它已经是引用类型但不是值类型? 谢谢!

C#:循环查找函数的最小值

我目前有这个function: public double Max(double[] x, double[] y) { //Get min and max of x array as integer int xMin = Convert.ToInt32(x.Min()); int xMax = Convert.ToInt32(x.Max()); // Generate a list of x values for input to Lagrange double i = 2; double xOld = Lagrange(xMin,x,y); double xNew = xMax; do { xOld = xNew; xNew = […]

如何迭代C#类查找特定类型的所有实例,然后在每个实例上调用方法

是否有可能(通过reflection?)迭代一个对象的所有字段,在每个字段上调用一个方法。 我有一个这样的课: public class Overlay { public Control control1; public Control control2; } 我想要一个像这样的方法: public void DrawAll() { Controls[] controls = “All instances of Control” foreach (Control control in Controls) { control.Draw() } } 可以这样做吗? 我已经能够获得Control类的所有元数据,但这只与特定实例的类型有关。 我知道这看起来很奇怪,但我有理由。 我正在使用Unity 3D,每个控件实际上都是由编辑器实例化的GUI控件。 谢谢你的帮助。

无法从C#WPF中的另一个窗口调用方法

好吧,假设我有两个窗口。 在第一个我有一个方法 public void Test() { Label.Content += ” works”; } 在第二个我称之为这个方法: MainWindow mw = new MainWindow(); mw.Test(); 但没有任何反应。 我究竟做错了什么? 谢谢。

使用Dynamic而不是reflect来按名称调用方法

使用.NET-4.0,如何在不使用reflection的情况下使用Dynamic来完成以下操作? public void InvokeMethod(string methodName) { Type t = typeof(GCS_WebService); GCS_WebService reflectOb = new GCS_WebService(); MethodInfo m = t.GetMethod(methodName); m.Invoke(reflectOb, null); }

在C#中重复代码的最佳方法是什么?

我目前有一个代码块在Button Clicks中的整个程序中重复,但有一些变量除外。 问题是,当我从单击一个按钮转到另一个按钮时, plHTML开始从前一个按钮泄漏文本。 在我尝试制作该方法之前没有发生这种情况。 如何防止变量相互泄漏? 这是我试图制作的方法 String firstPart; String lastPart; String secondPart; String cleanCombo1, cleanCombo2, cleanCombo3, cleanCombo4; public void GetTextBetween(string First, string Second, string Last) { String St1 = passlotHTMLP1.Text; int pFrom1 = St1.IndexOf(First) + First.Length; int pTo1 = St1.IndexOf(Last, pFrom1); if (St1.Substring(pFrom1, pTo1 – pFrom1).Contains(Second)) { cleanCombo1 = St1.Substring(pFrom1, pTo1 – pFrom1); } […]

如何在LINQ lambda扩展方法中插入方法

我必须在LINQ lambda中放置一个方法。 我有以下代码: string productName = “Some product”; searchShoppingCart = shoppingCart.Where(m => productName.Equals(_ProductRepository.GetProductName(m.Id))); 基本上,此代码用于选择包含productName所有shoppingCart实例。 方法string GetProductName(int shoppingCartId)是_ProductRepository中的一个方法,它返回一个产品的名称。 如何实现此方法及其逻辑无关紧要。 问题是LINQ抛出exception 。 我知道抛出此exception的原因,我只是想知道一个解决方法。 我试过了 var productContained = shoppingCart.Select(sc => new { scId = sc.Id, productName = _ProductRepository.GetProductName(sc.Id) }); searchShoppingCart = shoppingCart.Where(sc => sc.Id.Equals(productContained.Where(pc => pc.productName.Equals(productName)) .Select(pc => pc.Id))); 但它给了我同样的例外。 还有其他解决方法吗? UPDATE 抛出的exception是 LINQ to Entities无法识别方法’System.String GetProductName(Int32)’方法,并且此方法无法转换为商店表达式。