2008年2月29日

Implicitly typed local variables in Anonymous types

今天看到Implicitly typed local variables,測試了一下,直覺上設計了這玩意不知道要幹嘛? Orz
但是繼續看下去後,才發覺它的好玩之處...
在匿名型別上,可以透過巢狀的方式設計,或是透過一些基本型別或是強型別的物件來作為屬性(property)。


DataSet1TableAdapters.EmployeeTableAdapter em = new DataSet1TableAdapters.EmployeeTableAdapter();

DataTable dt = new DataTable();
dt = em.GetData();
var mytest = new { Test1 = "123", Test2 = 456, Test3 = 12.34 };
var person = new { Name = "Lolota ", Sex = "Male", Age = 99, MyProfile=dt, my=mytest};

label1.Text = person.MyProfile.Rows[0].ItemArray[1].ToString();


還有可以拿來處理查詢(LINQ):

private static void QueryNames(char firstLetter)
{
// Create the query. var is required because
// the query produces a sequence of anonymous types.
var studentQuery =
from student in students
where student.FirstName[0] == firstLetter
select new { student.FirstName, student.LastName };

// Execute the query.
foreach (var student in studentQuery)
{
Console.WriteLine("First = {0}, Last = {1}", student.FirstName, student.LastName);
}
}



參考:
1. Implicitly Typed Local Variables
2. How to: Use Implicitly Typed Local Variables and Arrays in a Query Expression

2008年2月20日

轉型的奧妙



在Visual Basic中,大家都習慣使用Ctype作轉型,但是轉型其實還有其他作法。

DirectCast

根據MSDN說明:
DirectCast 不會將 Visual Basic 執行階段 Helper 常式用於轉換,因此在資料型別 Object 間進行轉換時,它可提供的效能比 CType 還好

DirectCast 需要這兩個引數之資料型別之間的繼承實作關聯性。這表示其中一個型別必須繼承自另一個型別或實作另一個型別。

如果 DirectCast 偵測到沒有繼承或實作關聯性存在,則會產生編譯器錯誤。但沒有編譯器錯誤並不保證轉換成功。

下列的程式在編譯的時候就會出現錯誤。

Function xxx(ByVal str As String) As String
Return DirectCast(str, Integer)
End Function


TryCast

根據MSDN說明:
如果轉換嘗試失敗,CType 和 DirectCast 兩者會擲回 InvalidCastException 錯誤。這可能會對應用程式效能造成不利影響。TryCast 傳回 Nothing (Visual Basic),如此即不必處理可能的例外狀況,只需要針對 Nothing 測試傳回的結果

它需要兩個型別之間的繼承實作 (Implementation) 關係。這表示其中一個型別必須繼承自另一個型別或實作另一個型別。

如果 TryCast 未偵測到繼承或實作關聯性,則會產生編譯器錯誤。但沒有編譯器錯誤並不保證轉換成功。

下列的程式在編譯的時候就會出現錯誤。

Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function

Visual Studio 2008 Express Download Now



目前提供了下列版本:


有興趣的朋友,下載去啦~~

Heroes happen {here}



活動網址:http://www.microsoft.com/taiwan/hero/


相關議程:
http://www.microsoft.com/taiwan/hero/agenda_tp.aspx

影片觀賞:
http://www.microsoft.com/taiwan/hero/weapon.aspx

2008年2月12日

Polo不能再更新他的Blog了

http://blogs.msdn.com/polo_lee/

一個我很喜歡的blog,裡面的內容讓我受益良多。

Polo,一個我口中的御前帶刀護衛

曾經跟他哈拉了很久,以為他這次就快要回來...
沒想到,Moli老大昨晚跟我說他去了很遠的地方,沒有要再回來了。

R.I.P Polo...


Peter Hu的轟趴

2008年2月5日

Visual Studio 2008 新功能 - Extension Method

首先新增一個Class, 並加入下列方法:
 
Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices

Module StringExtension
_
Public Function ReturnStr(ByVal str As String) As String
Return "歡迎光臨" & str
End Function
End Module


透過上述的擴充模組,就可以在程式中使用String型態時,使用這個自訂的擴充功能.

Private Sub MyTestMothod()
Dim name As String = "John"
name.ReturnStr()
End Sub


如果是Integer型態,就是使用Integer的擴充模組

Module IntegerExtension
_
Public Function ReturnCount(ByVal ints As Integer) As Integer
Return ints + 10
End Function
End Module


程式就可以這樣使用:

Dim money As Integer = 100
money.ReturnCount()


這功能看起來是不是很方便呢? :)

[Info] 如何快速找到Fix it?

  台灣微軟目前提供了很多的Fix it,讓許多消費者可以不用看完整篇KB,只要按下一個按鈕,就可以幫使用者自動修正許多問題. 現在在Vista以及Windows 7上,微軟也提供了SideBar工具,讓你用最短的時間找到能修正您的電腦的Fix it.(目前為英文版本) ...