2012年1月13日
#
VS2010碰到奇怪错误:
在VS2010中打开项目,以及添加现有项目时候会显示一个如下的错误信息
The operation could not be completed. ClassFactory cannot supply requested class
"未能完成操作。ClassFactory 无法供应请求的类"的错误及解决方法

查了一个下午,把VS2010+SP1重新安装,以及把OS系统还原都不顶事儿。
最后在stackoverflow找到了答案
原来是vs2010启动程序的属性选项中的[兼容性]的[禁用视觉主题]给打上了钩子。

解决方法:
如上图所示,把属性中的[禁用视觉主题]设置为False,然后重新启动VS2010。
这类错误比较稀少,一旦发生处理起来还是比较麻烦的。
相关信息链接:
http://stackoverflow.com/questions/1890806/the-operation-could-not-be-completed-classfactory-cannot-supply-requested-class
2012年1月12日
#
第二章 LINQ to Objects 介绍
语言的增强
从C#3.0开始,逐步引入了许多新的构造,这些构造改善了开发的编码体验。而,所有这些新的语法构造几乎都与LINQ有着这样那样的联系。这些新特点主要可以分为2大类。第一类是一系列编译器语法增强来简化一些共通的代码结构,第二类的特点是改变了方法名称在编译过程中解析的方式。
如果要理解LINQ to Objects是如何编译的,那就有必要了解上面说到的C#3.0中心的语言特点。这一章会做一个简短的介绍,在后面的章节中还会深入。
扩展方法(Extension Methods)
对象初始化器(Object Initializers)
集合初始化器(Collection Initializers)
隐式类型局部变量(Implicitly Typed Local Variables)
匿名类型(Anonymous Types)
Lambda表达式(Lambda Expressions)
查询表达式(Query Expressions)
上一章
2012年1月11日
#
园子里面看到关于LINQ的文章比较少,所以想做一个系列,大家一起学习下如何使用LINQ to Objects。
这里博主正在阅读的是Troy Magennis写的《LINQ to Objects Using C#4.0》
本系列文章,提供该书内容的精简。

第一章 LINQ 介绍
什么是LINQ?
Language Integrated query(直译为语言集成查询) 读作 link(零克,是不是很轻的感觉呢^^)
LINQ是微软新推出的增强功能,用来处理一些数据。LINQ在.NET语言和各种数据源之间提供了一层编码抽象。
推出LINQ,其中一个目的是减少代码的复杂度和增强代码的阅读性。LINQ是开放的、可扩展的。
从.NET3.5开始支持LINQ,并在.NET4中进一步扩展。
涵盖的点
- LINQ to Objects
- LINQ to XML
- LINQ to Entities(part of the Entity Framework)
- LINQ to SQL
- PLINQ
- LINQ to Datasets
标准查询操作表(.net4)
|
操作类型
|
标准查询操作名
|
|
Aggregation
|
Aggregate, Average, Count, LongCount, Max, Min, Sum
|
|
Conversion
|
AsEnumerable, Cast, OfType, ToArray, ToDictionary, ToList, ToLookup
|
|
Element
|
DefaultIfEmpty, ElementAt, ElementAtOrDefault, First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault
|
|
Equality
|
SequenceEqual
|
|
Generation
|
Empty, Range, Repeat
|
|
Grouping
|
GroupBy, ToLookup
|
|
Joining
|
GroupJoin, Join
|
|
Merging
|
Zip
|
|
Ordering
|
OrderBy, ThenBy, OrderByDescending, ThenByDescending, Reverse
|
|
Projection
|
Select, SelectMany
|
|
Partitioning
|
Skip, SkipWhile, Take, TakeWhile
|
|
Quantifiers
|
All, Any, Contains
|
|
Restriction
|
Distinct, Where
|
|
Set
|
Concat, Except, Intersect, Union
|
下一章
2012年1月8日
#
ThreadStaticAttribute
在程序中,类的静态成员变量(c#:static;vb:shared),在使用时,会在该类的多个实例之间共享。
在多线程场合下,也不例外。有些读者或许会想到如何创建每个线程自己的静态变量呢,这里ThreadStaticAttribute就提供了一种十分简单的方法。
可以通过追加自定义特性“c#:[ThreadStatic];vb:<ThreadStatic>”的方法来实现。
具体可以参照下面的例子:
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(ThreadProc));
Thread t2 = new Thread(new ThreadStart(ThreadProc));
t1.Name = "Thread1";
t2.Name = "THread2";
t1.Start();
t2.Start();
Console.WriteLine("Press Enter key to exit...");
Console.ReadLine();
}
[ThreadStatic]
static int ThreadStaticValue;
static int StaticValue;
static Random r = new Random();
public static void ThreadProc()
{
StaticValue = ThreadStaticValue = r.Next(1, 10);
while(true)
{
if (Thread.CurrentThread.Name == "Thread1")
{
StaticValue++;
ThreadStaticValue++;
}
Console.WriteLine("{0}: ThreadStatic:{1}; Static:{2}", Thread.CurrentThread.Name, ThreadStaticValue, StaticValue);
Thread.Sleep(500);
}
}
}
可以看到,代码中定义了两个静态变量,一个是被ThreadStatic特性修饰的ThreadStaticValue变量,还有一个就是一般的静态变量。
我们在程序中起了2个线程,用来查看实行的结果。

首先,我们使用随机数初始化了两个静态成员变量,然后线程1每过0.5秒把变量自增长1。
通过值的变化,我们就可以容易理解ThreadStatic的用途了。
参考资料:
msdn的说明
http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx
2011年12月23日
#
今天同事的电脑上配置WCF时候发生了error 500.21的错误,据说这是一种常见的错误。
详细:WCF - Error 500.21 Handler "svc-Integrated" has a bad module "ManagedPipelineHandler" in its module list"

当选择承载方式为Http的Web应用的方式来承载时候,这种承载方式需要依赖asp.net的相关模块。
解决方法:
1. Open Visual Studio Command Prompt
2. Input:aspnet_regiis.exe -iru
3. Run the command

这个问题通常发生在先装visualstudio后装IIS的WCF HTTP 激活模块,
如果先装IIS后装visualstudio则不会发生这个问题。