如果S仅是一个对象,你这样使用是没有什么意义的,using一般用天连接数据,然后对数据库中的对象操作

解决方案 »

  1.   

    用using指定的对象在using块内是只读的,所以不能修改它
      

  2.   

    如果是普通的引用对象,自然是可以修改的。可能你的 S 是个 struct。你应该给出更加详尽的代码。
      

  3.   


    你说的对,这个S就是一个struct>
    难道C#有规定说,using里面只能修改class不能修改struct?
    这样规定的意义是什么呢?谢谢。
      

  4.   


    你说的对,这个S就是一个struct>
    难道C#有规定说,using里面只能修改class不能修改struct?
    这样规定的意义是什么呢?谢谢。using关键字包含的对象是需要实现IDisposable接口的,否则因为无法释放资源而不能使用USING声明,
    结构体的话,应该是不能用using的。至于为什么不能修改,就不知道了。同求大神说明。。
    ++++或许是因为结构体无法用using声明导致.....+++++
      

  5.   

    结构体是值类型,类是引用类型
    所以在只读状态下(比如using和foreach内部)是不可以修改的.
      

  6.   

    你可以自己测一下:using System;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (S s = new S())
                {
                    Console.WriteLine(s);
                    s.x = 2;
                    s.y = 3;
                    Console.WriteLine(s);
                }
                Console.ReadKey();
            }
        }    public class S : IDisposable
        {
            public int x { get; set; }
            public int y { get; set; }        public void Dispose()
            {
            }        public override string ToString()
            {
                return string.Format("x={0}, y={1}", x, y);
            }
        }
    }
      

  7.   

    然后,你可以把public class S : IDisposable变为public struct S : IDisposable
    看看c#编译器给你什么反馈。
      

  8.   


    你说的对,这个S就是一个struct>
    难道C#有规定说,using里面只能修改class不能修改struct?
    这样规定的意义是什么呢?谢谢。正如#8楼所说,编译器防止你滥用struct而犯错。因为struct是随时都在拷贝复制对象的,而不是真正高效率地引用对象的。而using这类代码,要求在using(...)这个部分对引用的对象进行处理,而避免将来多你拷贝的副本进行处理。
      

  9.   


    也就是using一个引用的时候,lock是引用本身,而不是引用的对象。lock了一个结构体就是lock了结构体本身。
    明白了!