为啥这个数组中最后只有一个值(后面的值覆盖了前面的值)

Xuon 2009-12-14 11:40:54
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleTets
{
class Program
{
static void Main(string[] args)
{
string srcStr = "新洲区_武汉,黄浦区_上海,洪山区_武汉,崇安区_无锡,黄陂区_武汉,滨湖区_无锡";
string cityName = "武汉,无锡,上海";

string[] citysArr = cityName.Split(',');
IEnumerable<string>[] areaName = new IEnumerable<string>[citysArr.Length];
int count = 0;
for(;count<citysArr.Length;count++)
{
areaName[count] = srcStr.Split(',').Where(a => a.Contains(citysArr[count])).Distinct();
}
//Console.WriteLine(count);
Console.Read();
}
}
}


最后areaName[0],areaName[1],areaName[2]的值都为"黄浦区_上海",值类型、引用类型的问题么?
...全文
389 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xuon 2009-12-15
  • 打赏
  • 举报
回复
cuike519 2009-12-15
  • 打赏
  • 举报
回复
这种方式打破了封装性,编译器会为这些闭包生成一些类和实例。这是一个编译器的技巧或者说特性,感觉不是很爽,C# 2.0的新特性没怎么用过,同类的问题有人问我,我第一次回答的结果是变量全部未初始化,所以都是0或者null,结果运行结果让我大吃一惊...

这些对程序员来说可能又是一个地雷...

这只是一个语言特性,并不是后一个覆盖了前一个。
guyehanxinlei 2009-12-15
  • 打赏
  • 举报
回复
学习
sito_hongta 2009-12-15
  • 打赏
  • 举报
回复
學習
Jave.Lin 2009-12-15
  • 打赏
  • 举报
回复
lambda没咋用过。
kennie_190602169 2009-12-15
  • 打赏
  • 举报
回复
学习
我姓区不姓区 2009-12-15
  • 打赏
  • 举报
回复
问题主要出在lambda表达式中,关于闭包中的局部变量问题,你可以参考该帖子:
http://topic.csdn.net/u/20090821/13/7c30e8cb-3d37-4d4f-9c11-0df1dd7be8f4.html
至于你这个问题,可以这样解决:

string srcStr = "新洲区_武汉,黄浦区_上海,洪山区_武汉,崇安区_无锡,黄陂区_武汉,滨湖区_无锡";
string cityName = "武汉,无锡,上海";

string[] citysArr = cityName.Split(',');
IEnumerable<string>[] areaName = new IEnumerable<string>[citysArr.Length];
int count = 0;
for (; count < citysArr.Length; count++)
{
int temp = count;
areaName[count] = srcStr.Split(',').Where(a => a.Contains(citysArr[temp])).Distinct();
}
//Console.WriteLine(count);
Console.Read();

Xuon 2009-12-14
  • 打赏
  • 举报
回复
而且是同一指针?
Xuon 2009-12-14
  • 打赏
  • 举报
回复
每次都赋值一个指针?

110,547

社区成员

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

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

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