小编Ty.*_*Ty.的帖子

从methodinfo获取委托

我有一个下拉列表,通过检查类的方法并包括与特定签名匹配的方法来填充.问题在于从列表中获取所选项目并让委托在类中调用该方法.第一种方法有效,但我无法弄清楚第二种方法的一部分.

例如,

public delegate void MyDelegate(MyState state);

public static MyDelegate GetMyDelegateFromString(string methodName)
{
    switch (methodName)
    {
        case "CallMethodOne":
            return MyFunctionsClass.CallMethodOne;
        case "CallMethodTwo":
            return MyFunctionsClass.CallMethodTwo;
        default:
            return MyFunctionsClass.CallMethodOne;
    }
}

public static MyDelegate GetMyDelegateFromStringReflection(string methodName)
{
    MyDelegate function = MyFunctionsClass.CallMethodOne;

    Type inf = typeof(MyFunctionsClass);
    foreach (var method in inf.GetMethods())
    {
        if (method.Name == methodName)
        {
            //function = method;
            //how do I get the function to call?
        }
    }

    return function;
}
Run Code Online (Sandbox Code Playgroud)

如何使第二种方法的注释部分工作?我如何MethodInfo投入代表?

谢谢!

编辑:这是工作解决方案.

public static MyDelegate GetMyDelegateFromStringReflection(string methodName) …
Run Code Online (Sandbox Code Playgroud)

c# reflection delegates

33
推荐指数
2
解决办法
2万
查看次数

Git Force推送语法," - f"与"+ branch"

当强制推动变化时,这两个git命令有什么区别?

git push -f origin branchgit push origin +branch

git

28
推荐指数
1
解决办法
3653
查看次数

NHibernate3查询与QueryOver

我注意到有两种方法可以创建对nhibernate的友好的通用友好访问.

IQueryOver<T, T> query= session.QueryOver<T>().Where(criteria);
Run Code Online (Sandbox Code Playgroud)

IQueryable<T> query= session.Query<T>().Where(criteria);
Run Code Online (Sandbox Code Playgroud)

每个接口的实现.

IQueryOver<TRoot, TSubType> : IQueryOver<TRoot>, IQueryOver
Run Code Online (Sandbox Code Playgroud)

IQueryable<out T> : IEnumerable<T>, IQueryable, IEnumerable
Run Code Online (Sandbox Code Playgroud)

IQueryable实现IEnumerable,因此支持您期望的所有LINQ友好的东西.我正在倾向于这个实现,但是想知道是否有人知道QueryOver的目的是什么,你无法用Query完成?

c# nhibernate orm

27
推荐指数
2
解决办法
2万
查看次数

一次性使用模式

  using (FileStream fileStream = new FileStream(path))
  {
    // do something
  }
Run Code Online (Sandbox Code Playgroud)

现在我知道using模式是IDisposable的一个实现,即设置了Try/Catch/Finally并在对象上调用Dispose.我的问题是如何处理Close方法.

MSDN说它没有被调用,但我已经读过了.

我知道FileStream继承自Stream,这里解释.现在说不要覆盖Close(),因为它是由Dispose()调用的.

那么有些类只是在Dispose()方法中调用Close()或者使用调用Close()吗?

c#

14
推荐指数
2
解决办法
9158
查看次数

处理上帝的对象

我在一个中等规模的团队工作,我经常遇到这些痛苦的大班文件.我的第一个倾向是用刀子去找他们,但这通常会让事情变得更糟,让我陷入一种糟糕的心态.

例如,假设您刚刚获得了Windows服务.现在这个服务中存在一个错误,你需要弄清楚服务的作用,然后你才有希望修复它.你打开服务,看到有人决定只使用一个文件.Start方法就在那里,Stop方法,Timers,所有处理和功能.我正在谈论成千上万行代码.一百行代码下的方法很少见.

现在假设你不能重写整个班级,而这些上帝课程只会不断出现,处理它们的最佳方法是什么?你从哪里开始的?你先尝试做什么?你是如何应对这种事情的,而不只是想要全力以赴.

如果你有一些策略只是为了控制你的脾气,这也是受欢迎的.

提示远远:

  1. 建立测试覆盖率
  2. 代码折叠
  3. 重组现有方法
  4. 记录发现的行为
  5. 旨在逐步改进

编辑:

查尔斯康威推荐一个播客,结果非常有帮助.链接

Michael Feathers(播客中的人)开头的前提是,他们太害怕简单地将一个项目从源代码控制中取出来直接玩它然后扔掉它们.我可以说我对此感到内疚.

他基本上说要把你想要了解的项目拿到更多,然后开始将它拆开.发现它的依赖关系,然后打破它们.随处可见.

伟大提示 获取在其他地方使用的大类,并使其实现一个emtpy接口.然后使用类获取代码并让它实例化接口.这将为您提供代码中该大型类的所有依赖项的完整列表.

language-agnostic debugging god-object

11
推荐指数
1
解决办法
1381
查看次数

ASP.NET页面验证

相关文章

关于上述文章的类似主题,但更具体的说明.您如何处理视图状态中的项目(因此它们包含在提交中),但也可以通过AJAX进行更改.例如,假设我们有一个通过AJAX Web服务调用(而不是更新面板)填充的下拉列表.下拉列表的项目更改后,如何让页面验证?

asp.net validation ajax

5
推荐指数
1
解决办法
2261
查看次数

Javascript范围混乱

我找不到与我的问题完全匹配的问题,尽管存在许多javascript范围问题.这是我目前的问题代码.

var my_var = "blank";
var MyFunc = function() {
    my_var = "one";
    //var my_var = "two";
}
alert(my_var);
MyFunc();
alert(my_var);
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我会被警告"空白",然后按照预期"一个".但是,如果我取消注释那一行,那么它看起来像这样.

var my_var = "blank";
var MyFunc = function() {
    my_var = "one";
    var my_var = "two";
}
alert(my_var);
MyFunc();
alert(my_var);
Run Code Online (Sandbox Code Playgroud)

我被警告"空白",然后"空白".这不是我所期望的,我发现添加一行会消除行为令人困惑.谁能解释一下这里发生了什么?我在firefox和safari中都看到了这种行为.

javascript

5
推荐指数
1
解决办法
130
查看次数

Objective-C中"@public"是什么意思?

在阅读了关于@private问题后,我明白了它是如何工作的.但是,由于所有变量都默认为@protected,并且在没有定义访问器的情况下无法真正访问变量,@public究竟做了什么?你什么时候用它?

iphone objective-c

3
推荐指数
1
解决办法
2061
查看次数

C#中的代码好奇心

我正在查看YUI Compressor,并在ECMA.NET项目中遇到了这段代码(如果您感兴趣,可以使用Continuation文件).

protected internal override int FindPrototypeId (string s)
    {
        int id;
        #region Generated PrototypeId Switch
    L0: {
            id = 0;
            string X = null;
            if (s.Length == 11) { X = "constructor"; id = Id_constructor; }
            if (X != null && X != s && !X.Equals (s))
                id = 0;
        }
    EL0:
        #endregion
        return id;
    }
Run Code Online (Sandbox Code Playgroud)

我不知道L0:和EL0:在这里做什么,以前从未见过这个.这个词对谷歌来说似乎也太基础了.

有人知道这是什么一回事吗?

c# label goto

1
推荐指数
2
解决办法
269
查看次数

保持对象引用

鉴于以下设置和代码片段,您可以提出使用其中一个的原因是什么?我使用其中任何一个都有几个论点,但我很好奇其他人的想法.

建立

public class Foo
{
    public void Bar()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Snippet One

var foo = new Foo();
foo.Bar();
Run Code Online (Sandbox Code Playgroud)

小片二

new Foo().Bar();
Run Code Online (Sandbox Code Playgroud)

c# coding-style

0
推荐指数
1
解决办法
145
查看次数