2008年2月16日

MSDN博客中的一篇文章提到了.NET 3.5 SP1会带来的处个修正,见以下代码:

var floats = new ArrayList { 2.5f, 3.5f, 4.5f };
var ints = from int i in floats select i;

注意from后面声明的显式类型(int)。开发者会很自然地认为ints为[2,3,4],但在现在版本.NET 3.5环境下得到的却是[2,4,4]。

原来那段LINQ表达式将会被编译为以下方法调用:

var ints = floats.Cast<int>().Select<int,int>(i => i);

问题便出现在Cast这个扩展方法中,而Cast内部是通过调用Convert类的ToInt32方法转换ArrayList中元素类型的,而这个方法既不是对浮点数进行截去小数,也不是简单的round: ToInt32方法的文档中是这样描述返回值的:

value rounded to the nearest 32-bit signed integer. If value is halfway between two whole numbers, the even number is returned; that is, 4.5 is converted to 4, and 5.5 is converted to 6.

这种数值转换的方式被称为Banker's rounding

这是个程序语义的问题,将在以后的.NET Frameworkk 3.5 SP1中解决,估计只是修改Cast方法的实现。现在的应对方法是在一些应用场景中不使用显式范围变量。

posted @ 2008-02-16 23:07 Adrian H. 阅读(168) | 评论 (0)编辑

2008年2月14日

结合jQuery写了一个类似Web Portal的窗体控制页面(Demo),以前也用过Prototype等JavaScript library,发现jQuery不仅轻量,更是有自己的独特之处,足以满足自己的开发需求了~用jQuery我可以忽略很多basic的问题,比如浏览器兼容性。真是能让人体会到JavaScript的强大了。

看这个Web Portal Demo的源码就可能发现我有滥用closure的嫌疑,JavaScript的closure等动态特性简化了思维,抛开class,解决问题是那么直接~

posted @ 2008-02-14 20:13 Adrian H. 阅读(426) | 评论 (0)编辑

2008年2月12日

原文: Download All the .NET Reference Source Code at Once with Net Mass Downloader
这篇文章介绍了如何使用Net Mass Downloader批量下载.NET源代码和pdb文件,如何配置VS2005以支持使用.NET源代码进行调试。


End of post

posted @ 2008-02-12 21:59 Adrian H. 阅读(365) | 评论 (0)编辑

2008年2月10日

(又是初体验?)

Server Core的理念挺好的,极度减少预装的特性,减小被攻击外表以提高稳定性和效率,可自定义服务器角色和特性。

我的三年前买的本,从安装到登录用了30分钟(典型的Server Core安装时间为15分钟)。
硬盘占用为1.5G。



登录后只有一个命令行,传说中的"没有图形界面(GUI)",其实只是没有Explorer.exe这个Shell而已,GDI是不会跑出这个版本的 Windows内核的。Virtual Machine Addition安装失败,可能是因为没有对应Windows版本的安装包。
Task Manager里多了个Service标签页。
About中显示的版本:Build 6001: Service Pack 1,据消息称跟这和Vista SP1的版本号相同。Server 2008与Vista SP1是相同的版本的核心组件,这可以理解,但显示给用户看会不会很奇怪呢:"RTM的版本就已经SP1了"。
Create New Task对话框中的Browse按钮点击竟然无反应,看来在Server Core安装中是无法看到"文件夹图标"了,既然没有Shell这个按钮无效,为什么还要保留呢?灰的也可以理解啊。

于是我尝试安装一些Feature,使用ocsetup。。
本以为完全安装完IIS7会有一个可视化的管理界面,上网搜索后发现那是不会有的。。
安装GUI Shell界面到Server Core必定不是很简单的事情,我甚至没有找到一篇相关的文章。 我便想念GUI界面了,命令行对专家来说效率的确可以比GUI高,但GUI也并不是那么邪恶吧,有个选择多好呢(Server Core with GUI)?

Server Core对我来说没什么意义了,回北京买了新本后装个Full installation吧~

 

Original post: http://x-dev.cn/post/Windows-Server-2008-Server-Core-Exp.aspx

posted @ 2008-02-10 16:05 Adrian H. 阅读(555) | 评论 (4)编辑

2008年2月5日

C#小组Charlie Calvert在其博客发了一篇有关C#语言未来方向的文章,这片文章介绍了一个叫做动态查找的特性,它为.NET语言(包括建立在DLR上的语言)能有一个统一的动态运行时名称绑定方案,让C#能与其他.NET动态语言(如IronPython和IronRuby)进行交互。它的应用场景包括:

  1. 办公自动化:其实就是能更方便得调用Office的COM Interop,避免了膨胀的类数目
  2. 与动态语言交互:动态!动态!
  3. 调用反射:更方便的运行时动态调用

 
未来的C#动态部分可能采取一下的语法,即使用dynamic与静态部分分离:

static void Main(string[] args)
{
    dynamic
    {
        object myDynamicObject = GetDynamicObject();
        myDynamicObject.SomeMethod();         // call a method  
        myDynamicObject.someString = "value"; // Set a field
        myDynamicObject[0] = 25;              // Access an indexer
    }
}

其实ActionScript本身是动态语言,在3.0中加入了静态特性,同时也支持dynamic class和dynamic call等完全的ECMAScript的特性,有时候我写AS3的时候觉得比C#还舒服,我只是写一个小testing程序,为什么我要声明它的类型?于 是我们的C#也要来凑动态语言的热闹了,本身纯洁的C#已经慢慢变成了一个大杂烩……很早前看到的一篇文章说Microsoft就是一个厨师,总是希望能 满足所有人的口味,但那真的不好做,事物必须得发展(与时俱进)。

我一直觉得还没有一个语言能让我满足,现在的程序开发中依然有许多冗余的信息和文本,我始终觉得人的逻辑到计算机的映射可以更加无损和简洁。期待未来吧,C# 4.0,还有VS 10。

 

Original Post: http://x-dev.cn/post/C-Future-Focus-e58aa8e68081e69fa5e689beefbc88Dynamic-Lookupefbc89.aspx

posted @ 2008-02-05 21:23 Adrian H. 阅读(177) | 评论 (1)编辑