none
此问题关系到版本问题,需资深高手进入 RRS feed

  • 问题

  • 背景:以前在VS2003中C#开发的程序,现在移交到VS2008上运行。
    问题:在VS中的类型转换。不知道是强制转换,还是属于重复定义。

    代码如下:
      public static void Method( ref string[] GetDate)
    {
      //GetDate[0]:SM GetDate[1]:PL GetDate[2]:SS  GetDate[3]:OM
      try
    {
    for(int i=0; i <= 3 ; i++)//SM PL SS OM 为NULL的情况下,用“”赋值。
    {
    if(GetDate[i].ToString() == null || GetDate[i].ToString() == "" )  
    {
    (string)GetDate[i] = "";

    }
    }
      catch()
    }
    在以前的系统中跑是没有问题的(vs2003下跑),这样的写法(请不要质疑上述的语法,一开始我也曾质疑,但是那个程序已经跑了好多年了,现在只是服务器升级,顺便这个程序也升一下。)。。。。不知道是属于重新定义,还是转换类型的问题

    现在移交到VS2008上,编译不过,解决方案我也有了,就是Convert.TOsting().
    关键问题,是如何解释上述问题?客户需要。我猜想是不是开发版本的问题(小弟没有用过2003,不知道),但那只是猜想没有说服力。。。。。所以希望资深的老大哥解释一下。最好来点有说服力的文档,或者资深的经验说明。。。
    改正确没有问题,但是就是该如何跟客户解释。光说是可能是版本问题,我想是没有说服力的。。。。

    2010年7月7日 6:16

答案

  • 你好!

         我不太清楚你为什么认为这个不是语法错误,但是这个写法在Visual Studio.NET 2003下也是报告语法错误的,我已经用C#1.0的编译器测试了:

         VS2003报这个错误:

    无效的表达式项“string”
    应输入 )

         VS2008报这个错误:

         错误    1    赋值号左边必须是变量、属性或索引器   

    这个语法错误对应的文档如下:

    http://msdn.microsoft.com/zh-cn/library/x5s08de8%28VS.80%29.aspx


    周雪峰
    2010年7月7日 7:14
    版主

全部回复

  • 背景:以前在VS2003中C#开发的程序,现在移交到VS2008上运行。
    问题:在VS中的类型转换。不知道是强制转换,还是属于重复定义。

    代码如下:
      public static void Method( ref string[] GetDate)
    {
      //GetDate[0]:SM GetDate[1]:PL GetDate[2]:SS  GetDate[3]:OM
      try
    {
    for(int i=0; i <= 3 ; i++)//SM PL SS OM 为NULL的情况下,用“”赋值。
    {
    if(GetDate[i].ToString() == null || GetDate[i].ToString() == "" )  
    {
    (string)GetDate[i] = "";

    }

    在以前的系统中跑是没有问题的(vs2003下跑),这样的写法(请不要质疑上述的语法,一开始我也曾质疑,但是那个程序已经跑了好多年了,现在只是服务器升级,顺便这个程序也升一下。)。。。。不知道是属于重新定义,还是转换类型的问题

    现在移交到VS2008上,编译不过,解决方案我也有了,就是Convert.TOsting().
    关键问题,是如何解释上述问题?客户需要。我猜想是不是开发版本的问题(小弟没有用过2003,不知道),但那只是猜想没有说服力。。。。。所以希望资深的老大哥解释一下。最好来点有说服力的文档,或者资深的经验说明。。。
    改正确没有问题,但是就是该如何跟客户解释。光说是可能是版本问题,我想是没有说服力的。。。。
     
     

    }
      catch()
    }

    2010年7月7日 6:22
  • 你好!

         我不太清楚你为什么认为这个不是语法错误,但是这个写法在Visual Studio.NET 2003下也是报告语法错误的,我已经用C#1.0的编译器测试了:

         VS2003报这个错误:

    无效的表达式项“string”
    应输入 )

         VS2008报这个错误:

         错误    1    赋值号左边必须是变量、属性或索引器   

    这个语法错误对应的文档如下:

    http://msdn.microsoft.com/zh-cn/library/x5s08de8%28VS.80%29.aspx


    周雪峰
    2010年7月7日 7:14
    版主
  • 你好!

         我已经在Visual Studio板块做了回复了,我们可以在那里进行讨论。请不要重复发帖,多谢合作!


    周雪峰
    2010年7月7日 7:36
    版主
  • 这个写法有问题。

    我这里有vs2003,我按照你的写法编译报错:

    d:\xxx.cs(21,11): error CS1525: 无效的表达式项“string”
    d:\xxx.cs(21,12): error CS1026: 应输入 )

    ps,GetDate[i].ToString() == null  这个写法也是错的,可以想象这个代码的可信度。。。


    family as water
    2010年7月7日 8:19
  • 我不知道 ref string[] GetDate 这样的入参修饰有什么特别意义。

    GetDate 本来就是 string 类型的数组了,却还要 ToString Convert.ToString。

    2010年7月7日 9:25
  • 相当诡异的写法
    2010年7月8日 4:02