搜尋此網誌

2010年3月18日 星期四

C#:Dynamic Array

適用於 .NET 2.0 以上

無法確定陣列長度,要動態存取Grid陣列時:

List<Grid> dynamicGrid = new List<Grid>();

加入物件:

Grid myGrid = new Grid();
dynamicGrid.Add(myGrid)

取得物件,假設想要取得第一萬兩千三百四十五個Grid:

Grid tmpGrid = dynamicGrid[12345];


參考頁:http://forums.asp.net/p/1188478/2036031.aspx#2036031

2010年3月3日 星期三

3D Gesture:蠻有感覺的3D Gesture

參考頁:http://web.media.mit.edu/~mhirsch/bidi/
研究3D Gesture者可以參考一下,其內容為一種融合觸控及3D Gesture的LCD,其中他們同時提供paper,說明使用LCD同時達成「capture」及「display」。

Bidi Screen於YouTube的影片

2010年3月1日 星期一

Silverlight、C#:Unicode轉換

在C#中可使用以下程式碼對字串轉換為Unicode或將Unicode轉換為字元:

Encode

using System.Text;

private string StringToUnicode(string srcText)
{
  string dst = "";
  char[] src = srcText.ToCharArray();
  for (int i = 0; i < src.Length; i++)
  {
   byte[] bytes = Encoding.Unicode.GetBytes(src[i].ToString());
   string str = @"\u" + bytes[1].ToString("X2") + bytes[0].ToString("X2");
   dst += str;
  }
  return dst;
}

Decode

using System.Globalization;

private string UnicodeToString(string srcText)
{
string dst = "";
string src = srcText;
int len = srcText.Length / 6;

for (int i = 0; i <= len - 1; i++)
{
  string str = "";
  str = src.Substring(0, 6).Substring(2);
  src = src.Substring(6);
  byte[] bytes = new byte[2];
  bytes[1] =  
   byte.Parse(int.Parse
    (str.Substring(0,2),NumberStyles.HexNumber).ToString());
  bytes[0] = byte.Parse(int.Parse
    (str.Substring(2,  2),NumberStyles.HexNumber).ToString());
  dst += Encoding.Unicode.GetString(bytes);
  }
  return dst;
}


但上述程式碼中,Decode的部份在Slilverlight會出現「... is inaccessable due to its protection level」的錯誤,請改為以下內容,程式即可正常編譯:
Decode at Silverlight

string UnicodeToString(string srcText)
{
 string dst = "";
 string src = srcText;
 int len = srcText.Length / 6;

 for (int i = 0; i <= len - 1; i++)
 {
  string str = "";
  str = src.Substring(0, 6).Substring(2);
  src = src.Substring(6);
  byte[] bytes = new byte[2];
  bytes[1] = byte.Parse(int.Parse(str.Substring(0, 2),
   NumberStyles.HexNumber).ToString());
  bytes[0] = byte.Parse(int.Parse(str.Substring(2, 2),
   NumberStyles.HexNumber).ToString());

  Encoding enc = Encoding.GetEncoding("utf-16");
  dst += enc.GetString(bytes, 0, bytes.Length);

 }
  return dst;
}