使用MethodBase
,是否可以獲取被調用方法的參數及其值?如何使用Reflection獲取方法中的參數值?
具體來說,我試圖使用反射來創建緩存鍵。由於每種方法及其參數列表都是獨一無二的,所以我認爲以此爲關鍵是理想的。這是我在做什麼:
public List<Company> GetCompanies(string city)
{
string key = GetCacheKey();
var companies = _cachingService.GetCacheItem(key);
if (null == company)
{
companies = _companyRepository.GetCompaniesByCity(city);
AddCacheItem(key, companies);
}
return (List<Company>)companies;
}
public List<Company> GetCompanies(string city, int size)
{
string key = GetCacheKey();
var companies = _cachingService.GetCacheItem(key);
if (null == company)
{
companies = _companyRepository.GetCompaniesByCityAndSize(city, size);
AddCacheItem(key, companies);
}
return (List<Company>)companies;
}
凡GetCacheKey()
定義(大約)爲:
public string GetCacheKey()
{
StackTrace stackTrace = new StackTrace();
MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
string name = methodBase.DeclaringType.FullName;
// get values of each parameter and append to a string
string parameterVals = // How can I get the param values?
return name + parameterVals;
}
嗨安德魯,這要求我必須每次寫入每個參數的名稱作爲'GetCacheKey()'的參數。如果可以的話,我想避免這種情況。如果我可以動態地獲取這些值,它會爲我節省很多打字量。 – DaveDev 2010-11-09 12:25:22
@DaveDev:我明白你的觀點。請記住,顯式傳遞參數比使用反射快得多。 – 2010-11-09 13:43:37