小编Ega*_*ahn的帖子

是否可以使用变量/动态字段集在C#中声明匿名类型?

在C#中,我想弄清楚是否可以声明一个匿名类型,其中字段在运行时才知道.

例如,如果我有一个键/值对列表,我可以根据该列表的内容声明一个匿名类型吗?我正在使用的具体情况是将参数传递给Dapper,我不知道我将提供多少参数.

List<Tuple<string, string>> paramList = new List<Tuple<string, string>>() {
    new Tuple<string, string>("key1", "value1"),
    new Tuple<string, string>("key2", "value2")
    ...
};
Run Code Online (Sandbox Code Playgroud)

我想将此List(或等效的Map)转换为匿名类型,我可以将其作为查询参数传递给Dapper.理想情况下,如果将以上列表定义为匿名类型,则上面的列表最终会如下所示:

new { key1=value1, key2=value2, ... }
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow上看到了几个问题,询问在声明它们之后扩展匿名类型("extendo objects"),或者在创建对象后声明任意字段,但我不需要这样做......我只是需要一次性地动态声明类型.我怀疑它是否需要一些花哨的反思,如果可能的话.

我的理解是编译器在编译时为引擎定义了一个匿名类的类型,所以如果该类的字段在运行时才可用,我可能会运气不好.事实上,我的用例实际上与使用"extendo对象"定义任意字段无关.

或者,如果有人知道更好的方法将查询参数传递给Dapper(而不是声明一个匿名类),我也很想知道这一点.

谢谢!

UPDATE

抱歉延迟回到这个!这些答案都很棒,我希望我能给大家一点.我最终使用了jbtule的解决方案(由Sam Saffron编辑),将IDynamicParameters传递给Dapper,所以我觉得我必须给他答案.其他答案也很好,并回答了我提出的具体问题.我非常感谢大家的时间!

c# dynamic anonymous-types dapper

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

Resharper 5.1重构(重构 - >移动)是否正确通知AnkhSVN /维护SVN历史记录?

我的开发环境是Visual Studio 2010,安装了Resharper 5.1.3000.12和AnkhSVN 2.1.10129.17.

我的理解是Resharper应该在文件上执行Refactor-> Move命令时通知AnkhSVN(或VisualSVN等),以维护文件上的SVN历史记录.但是,当我通过Visual Studio中的解决方案资源管理器执行此类重构时,AnkhSVN会将文件移动视为删除/添加,从而丢失该文件的SVN历史记录.实际上,Ankh甚至没有添加新版本的文件,它只是删除旧版本,我必须在我提交之前手动"添加"新版本.

但是,如果我通过解决方案资源管理器执行Ctl-X,Ctl-V来移动文件,Ankh将其检测为复制/移动并维护历史记录,自动添加新文件,并且通常表现得像预期的那样.

这是否适用于其他任何人,如果是这样,你是否必须做任何棘手的工作才能让它发挥作用?我是否错过了设置AnkhSVN和Resharper的设置,我是否需要新版本的插件,或者这可能是某种安装顺序问题?(我先安装了Resharper,然后安装了Ankh).

resharper refactoring ankhsvn move visual-studio

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