这是我用反射解决的问题,但是想看看如何使用表达式树来完成它.
我有一个通用的功能:
private void DoSomeThing<T>( param object[] args ) {
// Some work is done here.
}
Run Code Online (Sandbox Code Playgroud)
我需要在班上的其他地方打电话.现在,通常情况下,这很简单:
DoSomeThing<int>( blah );
Run Code Online (Sandbox Code Playgroud)
但只有我知道,在设计时我正在和他一起工作int.当我不知道类型,直到运行时我需要帮助.就像我说的,我知道如何通过反射来做到这一点,但我想通过表达式树来做,因为我(非常有限)的理解是我可以这样做.
我可以获得这种理解的网站的任何建议或指向,最好是样本代码?
我刚开始使用Code Contracts,需要一些帮助来纠正错误:
鉴于此代码:
class MyClass
{
private bool _isUsed = false;
public void SomeMethod()
{
Contract.Requires(!_isUsed);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error CC1038: Member 'MyClass._isUsed' has less visibility than the enclosing method 'MyClass.SomeMethod'
Run Code Online (Sandbox Code Playgroud)
这似乎使很多标准检查不可用.我在这个例子中缺少什么?
在我们的环境中,我们有两个内部框架和一个单独的网站。在开发过程中,对内部框架的引用倾向于设置为tp项目引用。但是,一旦我们发布了版本,内部框架就会安装到GAC中,因为它们用于每台服务器上网站的多个实例。手动将所有ProjectReferences更改为References,并重新编译和部署网站程序集和网站。
我正在尝试使此过程自动化。处理这些问题的最佳方法是什么?我已经开始学习MsBuild来尝试实现这一目标,但是我完全感到困惑。有关如何进行操作的任何指示和/或建议?
我有两个通用委托,我试图定义编译器抱怨它们是重复的,但在我看来是完全不同的。我在做什么/理解错了?
delegate TReturn foo<TParameter, out TReturn>(TParameter parameter, IItem item);
Run Code Online (Sandbox Code Playgroud)
和
delegate TReturn foo<TParameter, out TReturn>(TParameter parameter, int field, IItem item);
Run Code Online (Sandbox Code Playgroud)
如果我向第二个委托添加一个新的通用参数,则一切正常。
delegate TReturn foo<TParameter, TField, out TReturn>(TParameter parameter, TField field, IItem item) where TField struct
Run Code Online (Sandbox Code Playgroud)
但这似乎并不正确。我将始终为字段传递一个 int - 它不应该是一个泛型。