C#中何时使用dynamic

背景:比如说,有一个方法,有很多参数,且有时候只需要其中的某几个参数,有时候需要使用全部,甚至有时候一个都不需要,这时候写一个长长的参数列表一点都不酷,且容易 出错,这时候就需要考虑C#的dynamic类型来作为参数了。在操作sql语句的操作时尤为常见。

代码如下:

 1         public static void TestDynamic()
 2         {
 3             dynamic d = new ExpandoObject();
 4             d.Name = "sharpL";
 5             d.Age = 25;
 6             d.City = "北京";
 7             dosth(d);
 8         }
 9
10         public static void dosth(dynamic d1)
11         {
12             string tmp = "";
13             //把动态类型强制转换为字典类型
14             var kvs = (IDictionary<string, object>)d1;
15             if(kvs.ContainsKey("Name"))
16             {
17                 tmp += "  我的名字是"+kvs["Name"];
18             }
19             if (kvs.ContainsKey("Age"))
20             {
21                 tmp += "   我的年龄是" + kvs["Age"];
22             }
23             if (kvs.ContainsKey("Fun"))
24             {
25                 tmp += "   我的爱好是" + kvs["Fun"];
26             }
27             if (kvs.ContainsKey("City"))
28             {
29                 tmp += "   我的城市是" + kvs["City"];
30             }
31             Console.WriteLine(tmp);
32         }
33     }

  如上,我们可能只输入姓名,而有时可能需要输入所有的信息,用dynamic只需要一个方法就可以解决了,又不用输入长长的参数列表。

  这种情况常用于数据库查询或插入操作,尤其是插入操作中,有些表格有很多字段,我们总不能将每个字段都作为一个参数,那样真的蛮傻的,上面的代码只是一个例子。

时间: 2024-12-29 07:15:01

C#中何时使用dynamic的相关文章

C#中var和dynamic

var与dynamic这两个关键字,只是看起来很相似,仅此而已!var表示"变量的类型是在编译时决定的",但是dynamic表 示"变量的类型是在运行时决定的".因此,dynamic与var具有截然不同的含义.var让 你在初始化变量时少输入一些字,编译器会根据右值来推断出变量的类型.dynamic更厉害,它告诉编译器,根本就别理究竟是啥类型,运行 时再推断不迟.var只能用于局部变量的定义,你不能把类的属性定义成 var,也不能把方法的返回值类型或者是参 数类型定

教你在你的应用程序中扩展使用dynamic类型

教你在你的应用程序中扩展使用dynamic类型 相信大家在开发中经常会接触到mvc中的ViewBag,有心的同学会,发现这就是一个dynamic类型,查看源码一谈究竟,本文也是根据dynamic来扩展一些实际中的应用,方便开发过程中使用,来提高大家的工作效率等.这里我给大家介绍一个简单的,解析xml的扩展类. 先新建一个类,DynamicXmlNode 继承自DynamicObject,然后我们输入override,看一下,都有哪些方法可以重写的: 看到其中有2个方法,感觉很接近我们要用的,我这

Eclipse中添加web dynamic project

因为我的eclipse版本是kepler service release 2,所以我用了这个链接,http://download.eclipse.org/releases/helios/ 参考链接: http://stackoverflow.com/questions/22707108/eclipse-standard-kepler-service-release-2-isnt-updated-to-eclipse-with-javaee-s 另外 tomcat我用的这个 版本 http://p

Eclipse 中 不能创建 Dynamic web project

工作要涉及web开发,之前下载的java SE (我的是luna) 版本默认无法新建web项目,也就是找不到Dynamic Web ,在网上看了些解决办法,最终却是解决了问题,说到底就是安装一些用于EE web开发的插件即可.具体如下: (1)在确定联网的情况下,在help->install new software下根据你的eclipse版本选择下拉框选项,我的是indigo,所选情况如下: (2)在下面的下拉框中 Web, XML, Java EE and OSGi Enterprise D

C#中 Var 和 dynamic 整理介绍

常有人会拿var这个关键字来和dynamic做比较.实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较.var实际上是编译期抛给我们的"语法糖",一旦被编译,编译期会自动匹配var 变量的实际类型,并用实际类型来替换该变量的申明,这看上去就好像我们在编码的时候是用实际类型进行申明的.而dynamic被编译后,实际是一个object类型,只不过编译器会对dynamic类型进行特殊处理,让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期. 以var声明的变量

asp.net mvc中匿名类dynamic

dynamic info = new { name="aa", sex=“男”, age=13 }; //返回Model为info在前台中model.name报错,因为匿名类型默认访问修饰符为internal..net4.0提供ExpandoObject类型是一种可以再运行时随意动态添加和删除成员的类型. dynamic info = new ExpandoObject(); info.name="aa"; info.sex="男"; info.

Objective-C中的@dynamic(转)

转自 http://blog.csdn.net/haishu_zheng/article/details/12873151 Objective-C中的@dynamic 一.@dynamic与@synthesize的区别 @property有两个对应的词,一个是@synthesize,一个是@dynamic.如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var; @synthesize的语义是如果你没有手动实现setter方法和getter

C#中的Dynamic

dynamic dyn = (dynamic)1; int j = (int)dyn; 可以看到1被强制转换成dynamic,然后又被强制转换回int. 然而dynamic可以隐式的转换成任何类型,并且也可以从其他类型中转换回来, 所以上面的代码和下面的等价: dynamic dyn = 1; int j = dyn; //下面这句话会无法通过编译,typeof 运算符无法用在动态类型上 //Console.WriteLine(typeof(dynamic)); Console.WriteLin

Objective-C中的@dynamic

一.@dynamic与@synthesize的区别 @property有两个对应的词,一个是@synthesize,一个是@dynamic.如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var; @synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法. @dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成.(当然对于readonly的属性