Jie

心若无尘,一花一世界,一鸟一天堂;心若静,已如涅磐,风声物语,皆可成言.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

隐式类型的本地变量和数组

Posted on 2008-05-24 15:31  JieNet  阅读(222)  评论(0编辑  收藏  举报
    class CSharp30_Demo1
    
{
        
public override string ToString()
        
{
            
//隐式变量
            int i = 5; var vi = 10;
            
double d = 3.14; var vd = 3.14;
            
string s = "Hello"; var vs = "World";
            CSharp30_Demo1 demo 
= new CSharp30_Demo1(); var vcs30_ITLVA = new CSharp30_Demo1();

            
//隐式数组
            int[] ai = 123 };
            var vai 
= new[] 123 };

            StringBuilder sb 
= new StringBuilder();
            sb.AppendFormat(
"{0}{1}", i.GetType() == vi.GetType() ? "Yes" : "No", Environment.NewLine);
            sb.AppendFormat(
"{0}{1}", d.GetType() == vd.GetType() ? "Yes" : "No", Environment.NewLine);
            sb.AppendFormat(
"{0}{1}", s.GetType() == vs.GetType() ? "Yes" : "No", Environment.NewLine);
            sb.AppendFormat(
"{0}{1}", demo.GetType() == vcs30_ITLVA.GetType() ? "Yes" : "No", Environment.NewLine);
            sb.AppendFormat(
"{0}{1}", ai.GetType() == vai.GetType() ? "Yes" : "No", Environment.NewLine);

            
return sb.ToString();
        }


        
public static void Show()
        
{
            Console.WriteLine(
"CS3.0 - 隐式类型本地变量和数组 (Implicitly typed local variables){0}{1}{0}{2}{0}",
                Environment.NewLine, 
"——————————————————————————————",
                
new CSharp30_Demo1().ToString());
        }

    }



     可以赋予局部变量推断“类型”var 而不是显式类型。var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework 类库中定义的类型或任何表达式。

    下列限制适用于隐式类型的变量声明:
  • 只有在同一语句中声明和初始化局部变量时,才能使用 var;不能将该变量初始化为 null。

  • 不能将 var 用于类范围的域。

  • var 声明的变量不能用在初始化表达式中。换句话说,var v = v++; 会产生编译时错误。

  • 不能在同一语句中初始化多个隐式类型的变量。

  • 如果一个名为 var 的类型位于范围中,则当您尝试用 var 关键字初始化局部变量时,将收到编译时错误。

    在查询表达式中,当难以确定查询变量的确切构造类型时,您会发现 var 也很有用。这种情况可能发生在分组和排序操作中。