游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5196|回复: 8

关于C#中的数据类型---结构类型---的问题

[复制链接]

3

主题

18

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2006-11-3 11:15:00 | 显示全部楼层 |阅读模式
我在程序中声明了一个用于保存玩家游戏结果的结构GameResult,然后GameResultList是GameResult类型的一个ArrayList,下面是一段程序:
如果是这样写:
for( int i = 0;i < Resultlist_.Count;i++)
{       
    GameResult result = (GameResult)Resultlist_;

   result.rank = i + 1;
}
程序可以编译通过,但是        Resultlist_内的每个GameResult的结果都为0,也就是说根本没有把值赋进去,可是如果我这样写
int i = 0;
foreach(GameResult result in Resultlist_)
{
    result.rank = i+1;
    i++;
}
那编译就会报错,说the left-hand side of an assignment must be a variable,property or indexer
请问这是为什么??? [em24] [em24]

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2006-11-3 20:44:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

不应该在for 内部声明 result吧。

0

主题

10

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2006-11-3 22:43:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

楼上的看出来了!今天看了一下竟然没看到!!~
result在FOR里面不断的被重新声明了就会产生多个GameResult 所以才会赋值不成功.
这里加上FOREACH为什么会出错(因为我经常犯这种错误):
LZ说用的是ARRYLIST 这个类是一个集合类用FOREACH时只能作为读取而不允许赋值操作的因为赋值后集合改变了就无法再枚举下去了.所以会报错.
这里再给个提示如果想用集合类的话建议用集合的泛类型(这种类只支持.net framwork2.0)
MSDN2005里会提倡你用这种类代替原来的集合类.
比如Colletions<string> colletion = new Colletions<string>();

研究.NET不是很久所以只能解释到这里了!

0

主题

10

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2006-11-4 10:00:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

关于泛类可以看看这个
http://www.cnblogs.com/Koy/archive/2006/09/16/506011.aspx

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-11-4 23:22:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

你问题没有描述好,信息不完整,无法作答

3

主题

18

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2006-11-6 12:43:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

      可能是gogoline说的那个原因吧?但GameResultList的类型是没办法改变的,因为它是一种协议数据,也就是说是服务器和客户端共用的数据,是在协议里面定义的...它的类型是通过代码生成工具自动生成的.....
      如果我不用foreach的话,请问还可以用什么方法枚举GameResultList里面的对像并同时修改其值呢?

0

主题

10

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2006-11-6 15:13:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

如果是这样的话你最好不要用foreach了!因为foreach实现的是IEnumerator 接口进行枚举的。MSDN是这样说的:

只要该集合保持不变,枚举数也就保持有效。如果对该集合进行了更改(例如添加、修改或删除了元素),该枚举数将失效(这一变化是不可逆转的),且其行为将变为未定义。
该枚举数不具有独占访问集合的权限;因此,枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作,您必须实现自己的同步。

如果按照上面的说法要修改同时要用foreach的话就要实现自己的同步。至于如何实现我到现在还在找!

0

主题

10

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2006-11-6 15:22:00 | 显示全部楼层

Re: 关于C#中的数据类型---结构类型---的问题

不用foreach那就只能用for了!!但是如果你是必须要用foreach来达到修改赋值的话我可以提供给你以下方法:


string[] KeyTemp = new string[Collection.Count + 1];

            int DateCount=0;

            foreach (string c in Collection)
            {
                if (c == “你要查找的值”)
                {
                    KeyTemp[DateCount] = c;
                    setDateCount++;
                }

            }

            DateCount = Collection.Count;
            for(int i = 0 ; i < DateCount + 1; i++)  
            {

                if (KeyTemp != null)
                {
                    Collection.Remove(KeyTemp);
                   //这里只做了删除操作,当然你可以做赋值或者修改操作

                }

            }

以上紧供参考

3

主题

18

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2006-11-7 12:37:00 | 显示全部楼层

Re:关于C#中的数据类型---结构类型---的问题

明白了,谢谢gogoline
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 19:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表