[C#] 問號"?"用法

在C#中「?」有三種用法。

  1. 可空類型修飾符(?):引用類型可以使用空引用表示一個不存在的值,而值類型通常不能表示為空,例如:string str=null;是正確的。int i=null;編譯器將報錯。為了使值類型也可為空,可空類型出現了,可空類型使用可空類型修飾符?來表示,表現形式為T?。例:int? 表示是可空的整形,DateTime?表示為可空的時間。T?其實是System.Nullable<T>(泛型結構)的縮寫形式,也就意味著當你用到T?時編譯器在編譯時會把T?編譯成System.Nullable<T>的形式,例如:int?,編譯後便是System.Nullable<int>的形式。
  2. 三元(運算符)表達式(?:)。
  3. 空合併運算符(??):用於定義可空類型和引用類型的默認值。如果此運算符的左操作數不為 null,則此運算符將返回左操作數;否則返回右操作數。 例:a ?? b,當a為null時則返回b,a不為空時返回a本身。空合併運算符為右結合運算符,即操作時從右向左進行組合的。如,「a ?? b ?? c」的形式按「a ?? (b ?? c)」計算。

文章來源:http://blog.csdn.net/loveyou128144/article/details/4409706

廣告
Posted in C#

[iOS8] app

Minimal Hosts Blocker
http://arcticsn0w.github.io/
http://arcetera.github.io
留言板
http://www.reddit.com/r/jailbreak/comments/3bevud/update_minimal_hosts_blocker_61/

介紹
https://www.ptt.cc/bbs/iPhone/M.1423337741.A.CE5.html

其他
iOS8省電技巧大公開!讓iOS8更持久減少耗電

Posted in iOS | 已加上的標籤

[C#] Compare two string Arrays

比較 string Array
http://www.dotblogs.com.tw/rainmaker/archive/2012/02/02/67456.aspx

比較兩個 DataTable

/// <summary>
/// 比較兩個DataTable數據(結構相同)
/// </summary>
/// <param name="dt1">來自數據庫的DataTable</param>
/// <param name="dt2">來自文件的DataTable</param>
/// <param name="keyField">關鍵字段名</param>
/// <param name="dtRetAdd">新增數據(dt2中的數據)</param>
/// <param name="dtRetDif1">不同的數據(數據庫中的數據)</param>
/// <param name="dtRetDif2">不同的數據(圖2中的數據)</param>
/// <param name="dtRetDel">刪除的數據(dt2中的數據)</param>
public static void CompareDt(DataTable dt1, DataTable dt2, string keyField,
    out DataTable dtRetAdd, out DataTable dtRetDif1, out DataTable dtRetDif2,
    out DataTable dtRetDel)
{
    //為三個表拷貝表結構
    dtRetDel = dt1.Clone();
    dtRetAdd = dtRetDel.Clone();
    dtRetDif1 = dtRetDel.Clone();
    dtRetDif2 = dtRetDel.Clone();

    int colCount = dt1.Columns.Count;

    DataView dv1 = dt1.DefaultView;
    DataView dv2 = dt2.DefaultView;

    //先以第一個表為參照,看第二個表是修改了還是刪除了
    foreach (DataRowView dr1 in dv1)
    {
        dv2.RowFilter = keyField + " = '" + dr1[keyField].ToString() + "'";
        if (dv2.Count > 0)
        {
            if (!CompareUpdate(dr1, dv2[0]))//比較是否有不同的
            {
                dtRetDif1.Rows.Add(dr1.Row.ItemArray);//修改前
                dtRetDif2.Rows.Add(dv2[0].Row.ItemArray);//修改後
                dtRetDif2.Rows[dtRetDif2.Rows.Count - 1]["FID"] = dr1.Row["FID"];//將ID賦給來自文件的表,因為它的ID全部==0
                continue;
            }
        }
        else
        {
            //已經被刪除的
            dtRetDel.Rows.Add(dr1.Row.ItemArray);
        }
    }

    //以第一個表為參照,看記錄是否是新增的
    dv2.RowFilter = "";//清空條件
    foreach (DataRowView dr2 in dv2)
    {
        dv1.RowFilter = keyField + " = '" + dr2[keyField].ToString() + "'";
        if (dv1.Count == 0)
        {
            //新增的
            dtRetAdd.Rows.Add(dr2.Row.ItemArray);
        }
    }
}

//比較是否有不同的
private static bool CompareUpdate(DataRowView dr1, DataRowView dr2)
{
    //行裡只要有一項不一樣,整個行就不一樣,無需比較其它
    object val1;
    object val2;
    for (int i = 1; i < dr1.Row.ItemArray.Length; i++)
    {
        val1 = dr1[i];
        val2 = dr2[i];
        if (!val1.Equals(val2))
        {
            return false;
        }
    }
    return true;
}

Windows 7 USB 有問題的解法…

http://hikari-solving.blogspot.tw/2012/03/windows-7-usbwe-were-unable-to-copy.html

這應該是讀取某些隨身碟的MBR(Master Boot Record),導致無法進行後續的寫入動作
而MBR是一般格式化所無法更動的,所以不論是Windows在製作時重新格式化
或者自己格式化都沒用

解決方法:重新建立MBR

step 1.
執行命令提示字元(或在啟動中輸入cmd)

step 2.
輸入diskpart
如出現「是否允許這個程式存取你的電腦」,選擇是
這樣就會啟動diskpart程式

step 3.
輸入list disk
會出現你現在所有的磁碟槽

step 4.
輸入 select disk x
(x帶入你想格式化的隨身碟)
選擇要操作的硬碟

step 5.
依序輸入
clean
create partition primary
active
format quick fs=fat32
(或是 format quick fs=ntfs)
assign
exit

結束程式之後,再重新製作Windows 7 USB 安裝程式即可

microsoft .net framework ngen

更新 .net framework 後 ngen 功能會執行一斷長時間
解決方法 在某些情況下,安裝 Microsoft .NET Framework 4 更新的時間可能比預期還長

讓我自行修正此問題

如果要解決這個問題,您可以強制 NGen.exe 捨棄先前產生的原生映像,直接產生新的原生映像,藉此可多少縮短產生原生映像的時間。
如果要減少重新產生所耗費的時間,請在安裝 .NET Framework 4 更新之前立即開啟提高權限的命令提示字元,並執行下列命令。
重要套用此更新之前,請立即執行這些命令。否則,這些命令的作用便會減弱。

執行 32 位元 Windows 作業系統的電腦:
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe update /force /queue

執行 64 位元 Windows 作業系統的電腦:
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe update /force /queue
%windir%\microsoft.net\framework64\v4.0.30319\ngen.exe update /force /queue