2、使用變量表達式
變量表達式可用在標簽屬性,也可用在變量元素中。它的作用就是用於獲取變量中某個字段、屬性、函數方法或索引的結果值。比如上例中的#.var1就是說明獲取var1變量的值,也即是數值“1”。
對於變量值類型中真實存在的字段、屬性或函數方法,VT模版引擎將通過反射獲取其結果值,例如以下VT模版代碼:
我叫{$:user.name},今年{$:user.age}歲,我來自{$:user.location.getcity()}
假如對user變量賦以下類實例的值,那麼上面模版代碼解析時模版引擎將能正確解析出各個變量表達式的最終值。
class Location
{
public string GetCity(){
//code here
}
}
class User
{
public string Name { get; set; }
public int Age { get; set; }
public Location Location { get; set; }
}
但在某些情況下,我們需要獲取的“值”並不簡單地存在變量值的類型中,而是需要經過其它處理運算得出來的值。比如上面的獲取個人資料裡,我們還要獲取用戶的個人財產總額,但從上面的代碼裡可看出個人財產總額項並不存在於User類裡,所以導致VT模版引擎根本無法獲取此項的值。那我們要如何做才能獲取此項數據呢?VT模版引擎提供了一個手動設置變量表達式的值的方法,而我們要做的就是根據此方法手動設置變量表達式的值!例如上面的VT模版代碼改為如下:
我叫{$:user.name},今年{$:user.age}歲,我來自{$:user.location.getcity()},我的個人財產總共有{$:user.totalmoney}元。
從上面的類實例代碼中可知道totalmoney這個項是不存在User的屬性/字段列表裡的,所以我們就要手動設置{$:user.totalmoney}的值,示例代碼如下:
/// <summary>
/// 返回某個用戶的個人財產總額
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
static int GetUserTotalMoney(User user)
{
//code here
}
//------------------------使用代碼----------------------------------------//
//獲取user變量
Variable userVar = this.Document.Variables["user"];
//生成User實例
User user = new User();
//…………其它代碼略去…………//
//設置user變量的值為User實例
userVar.Value = user;
//手動設置totalmoney的值(注意,這行和上面那行的順序不能搞亂)
userVar.SetExpValue("totalmoney", GetUserTotalMoney(user));