zoukankan      html  css  js  c++  java
  • C#-----var, object, dynamic的区别以及dynamic、ExpandoObject的使用

       1.var, object, dynamic

        var是C# 3中引入的,其实它仅仅只是一个语法糖。var本身并不是一种类型,其它两者object和dynamic是类型

        var声明的变量在赋值的那一刻,就已经决定了它是什么类型

    下面这样声明,就会有编译错误:

        var a = 1;

        a = "Test";

        object之所以能够被赋值为任意类型的原因,其实都知道,因为所有的类型都派生自object. 所以它可以赋值为任何类型

    同样的声明,下面就不会有编译错误:

        object a = 1;

        a = "Test";

        dynamic它是C#引入的新类型,它的特点是申明为dynamic类型的变量,不是在编译时候确定实际类型的, 而是在运行时

    下面这样声明,不会有编译错误,运行时会报错:

        dynamic a = "test";

        a++;

        Console.WriteLine(a);

       2.dynamic、ExpandoObject

       在传递对象,但是又不想创建一个class或者struct的时候,ExpandoObject就是一个非常好的选择

    using System;
    using System.Collections.Generic;
    using System.Dynamic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<ExpandoObject> edoList = new List<ExpandoObject>();
                dynamic edoFirst = new ExpandoObject();
                edoFirst.userName = "yyx";
                edoFirst.userPwd = "123456";
                edoList.Add(edoFirst);
    
                dynamic edoSecond = new ExpandoObject();
                edoSecond.userName = "zy";
                edoSecond.userPwd = "654321";
                edoList.Add(edoSecond);
    
                foreach (dynamic edo in edoList)
                {
                    Console.WriteLine(edo.userName+" "+ edo.userPwd);
                }
                Console.ReadLine();
            }
        }
    }

       ExpandoObject使用注意:

    • ExpandObject不能用于太复杂的对象
    • ExpandObject的使用范围必须要短
    • ExpandObject的使用场合最好贴近程序的终端
  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/fengfuwanliu/p/10556907.html
Copyright © 2011-2022 走看看