为什么using语句内的变量不能修改?
如果我有以下代码:
using(S s = new S())
{
s.x = 2;
s.y = 3;
}
编译器会提示我Cannot modify members of 's' because it is a 'using variable'
这是为什么呢? 如果一个变量声明了就不能再修改了,那应该有readonly/const之类的修饰啊,为什么using了就不能修改了?
------解决方案-------------------- 如果S仅是一个对象,你这样使用是没有什么意义的,using一般用天连接数据,然后对数据库中的对象操作
------解决方案-------------------- 用using指定的对象在using块内是只读的,所以不能修改它
------解决方案-------------------- 如果是普通的引用对象,自然是可以修改的。
可能你的 S 是个 struct。你应该给出更加详尽的代码。
------解决方案-------------------- 类是可以修改的;
你的S难道是结构体吗?
------解决方案-------------------- 引用: Quote: 引用:
如果是普通的引用对象,自然是可以修改的。
可能你的 S 是个 struct。你应该给出更加详尽的代码。
你说的对,这个S就是一个struct>
难道C#有规定说,using里面只能修改class不能修改struct?
这样规定的意义是什么呢?
谢谢。
using关键字包含的对象是需要实现IDisposable接口的,否则因为无法释放资源而不能使用USING声明,
结构体的话,应该是不能用using的。至于为什么不能修改,就不知道了。同求大神说明。。
++++或许是因为结构体无法用using声明导致.....+++++
------解决方案-------------------- 结构体是值类型,类是引用类型
所以在只读状态下(比如using和foreach内部)是不可以修改的.
------解决方案-------------------- 这是编译器为了防止你犯错而做出的限制。
------解决方案-------------------- 你可以自己测一下:
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();