List[int] 的返回值不是变量

自由建客 2013-03-26 04:45:23
struct Entry {
public bool Visible;
...
}
...
List<Entry> EntryList;
...

EntryList[i].Visible= visible; // 这样不行,非要用下面三行不可
Entry entry= EntryList[i];
entry.Visible= visible;
EntryList[i]= entry;
...全文
190 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
linrachel 2013-03-26
  • 打赏
  • 举报
回复
因为Entry是struct,CLR via C#有解释,翻翻吧
  • 打赏
  • 举报
回复
p=>p.Visble=visible
cheng2005 2013-03-26
  • 打赏
  • 举报
回复
   public struct Symbol
    {
        public int Code;
        public Symbol(int code)
        {
            Code = code;
        }
    }

           List<Symbol> s1 = new List<Symbol>();
           Symbol[] s2 = new Symbol[1];
           s1.Add(new Symbol(1));
           s2[0] = new Symbol(2);

           s1[0].Color = 10; ----报错
           s2[0].Color = 20; ----不报错
public class Test
    {
        public Symbol MySymbol { get; set; }
		 public Symbol GetSymbol()
		 {
			return new Symbol(10);
		 }

        Test()
        {
           this.symbol.Code = 10; //这也是会报错的。
           GetSymbol().Code = 10;//这还是会报错。
        }
    }
这是因为C#的return处理,如果传的是引用类型,传递的是一个引用,如果是值类型,则传递的是拷贝。所以对return回来的值类型做修改只是修改的一个副本,这很容易引起歧义,使你的代码达不到想要的效果。C#为了避免这个问题和C#的严谨,所以在编译时作为错误处理。 “属性”的get访问器也是要调用return的,所以属性也有这个限制。 索引和数组不同的地方在于,索引器并没有直接对应引用数据存储的地方,而数组则有。 索引器有get访问器与set访问器,用来指明要读取或写入索引器元素时,需要执行的代码。 list的[]操作实际上是索引器,所以s1[0]是执行return的,所以也有这个问题。 数组是直接取数据,所以没有这个问题。
自由建客 2013-03-26
  • 打赏
  • 举报
回复
引用 1 楼 nikolay 的回复:
这句不行的错误提示是什么? EntryList[i].Visible= visible
无法修改 List<Entry>.this[int] 的返回值,因为它不是变量
EEEEEERROR 2013-03-26
  • 打赏
  • 举报
回复
引用 2 楼 forever_code 的回复:
EntryList.Foreach(p>p.Visble=visible);
少个"=" Foreach(p=>p.Visble=visible);
EEEEEERROR 2013-03-26
  • 打赏
  • 举报
回复
EntryList.Foreach(p>p.Visble=visible);
nikolay 2013-03-26
  • 打赏
  • 举报
回复
这句不行的错误提示是什么? EntryList[i].Visible= visible

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧