方式三:
1),而又沒有反映在所有:
GetParameterName1(new { variable });
public static string GetParameterName1<T>(T item) where T : class
{
if (item == null)
return string.Empty;
return item.ToString().TrimStart('{').TrimEnd('}').Split('=')[0].Trim();
}
2)使用反射,但較之其他雙向更快。 3)最慢的一個,不要使用。
GetParameterName3(() => variable);
public static string GetParameterName3<T>(Expression<Func<T>> expr)
{
if (expr == null)
return string.Empty;
return ((MemberExpression)expr.Body).Member.Name;
}
要獲得組合參數名稱和值,可以擴展這些方法。當然,如果將參數單獨作爲另一個參數傳遞,它很容易獲得價值,但這不夠雅緻。代替:
1)
public static string GetParameterInfo1<T>(T item) where T : class
{
if (item == null)
return string.Empty;
var param = item.ToString().TrimStart('{').TrimEnd('}').Split('=');
return "Parameter: '" + param[0].Trim() +
"' = " + param[1].Trim();
}
2)
public static string GetParameterInfo2<T>(T item) where T : class
{
if (item == null)
return string.Empty;
var param = typeof(T).GetProperties()[0];
return "Parameter: '" + param.Name +
"' = " + param.GetValue(item, null);
}
3)
public static string GetParameterInfo3<T>(Expression<Func<T>> expr)
{
if (expr == null)
return string.Empty;
var param = (MemberExpression)expr.Body;
return "Parameter: '" + param.Member.Name +
"' = " + ((FieldInfo)param.Member).GetValue(((ConstantExpression)param.Expression).Value);
}
1和2是可比較的速度的現在,圖3是再緩慢。
嗯,你爲什麼會想這樣做?我只需要了解這個 – 2008-09-16 13:31:00
背後的邏輯,我認爲有人想在Ruby中做同樣的事情。你可以搜索並看看他是否得到了有關如何去做的指示。 – Gishu 2008-09-16 13:31:08
這是一個反覆出現的主題,推動了我的堅果。一個智力問題將被用來做一些事情,而不是一個答案..人們想知道你爲什麼想要做..有足夠的邏輯來回答這個問題...... – 2014-08-16 21:09:24