我寫了一個接受通用參數對象的方法。該方法接受具有不同屬性的不同參數對象。這個想法是基於「MethodName」屬性的值,我可以基於該特定參數對象的屬性構建一個URI。我使用反射來獲取名爲「MethodName」的屬性的值。這不是一種方法,只是一個屬性名稱。交換機案例聲明的替代方法
我在case語句中使用MethodName屬性的值。這似乎是一種低劣的方式來完成我的任務。特別是隨着MethodNames的數量增長。
下面是case語句實現的源代碼。任何幫助,將不勝感激。
public string ConstructBBAPIUri<T>(T parameters)
{
var methodName = "";
var uri = "";
var userId = "";
long timeStamp = 0;
var signature = "";
var sessionKey = "";
var newUserId = "";
if (parameters != null)
{
methodName = parameters.GetType().GetProperty("MethodName").GetValue(parameters, null).ToString();
switch (methodName)
{
case "user.login":
userId = parameters.GetType().GetProperty("UserId").GetValue(parameters, null).ToString();
timeStamp = Convert.ToInt64(parameters.GetType().GetProperty("TimeStamp").GetValue(parameters, null));
signature = GenerateBunchBallSignature(userId);
uri = "method=" + methodName + "&apiKey=" + apiKey + "&userid=" + userId + "&ts=" +
timeStamp + "&sig=" + signature;
break;
case "user.modifyUserId":
//We shouldn't need the session key if user.login is being called first
userId = parameters.GetType().GetProperty("UserId").GetValue(parameters, null).ToString();
newUserId = parameters.GetType().GetProperty("NewUserId").GetValue(parameters, null).ToString();
uri = "method=" + methodName + "&sessionKey=" + sessionKey + "&oldUserId=" + userId +
"&newUserId=" + newUserId;
break;
}
}
return uri;
}
打開字符串在我看來是非常糟糕的。你爲什麼不驗證你的屬性是'enum ???'類型並打開枚舉值? – emartel
'T'對象,它們是否有任何通用接口或基類?或者他們完全不同?順便說一句,你有控制他們,你能改變他們的代碼嗎? –
最大,是T對象都有一個共同的接口。我確實可以控制代碼。 –