我需要我的Criterion類在其構造函數中接受各種類型,並保留原始類型和每個類型的值。這個術語中的參數數量可以從0到任意值。從對象[]轉換總是返回類型,而不是值
/* Examples of calls:
var c = new Criterion("IsActive", OperationCode.EQUALS, false);
var c = new Criterion("AgeRange", OperationCode.BETWEEN, 18, 35);
*/
public Criterion(string fieldName, OperationCode op, params object[] value) {
string FieldName = fieldName;
OperationCode Op = op;
object[] Value = value;
string display = String.Format("{0} {1} {2}", FieldName, Op, Value[0]);
}
在每種情況下,值的元素返回System.String [],而不是他們的價值。對於第一個示例調用,顯示將被設置爲IsActive EQUALS System.String []。 Convert.ToString(Value [0])沒有幫助,.ToString()也沒有幫助。想法?編輯#1:德米特里S提出了一個測試,打開了一個探索的途徑。我將Criterion與「false」作爲唯一值[]參數進行了調用。在即時窗口中,打印value.GetType()顯示它正如預期的那樣是一個Object []。 value [0] .GetType()顯示它是一個String []。雖然它最初是一個字符串,但我不理解爲什麼。在這種情況下,IsArray是真實的。 當我用整數14調用它時,值[0] .GetType()顯示一個非數組Int32。到目前爲止,打字很有意義。但我有興趣檢索值,而不是類型。
嘗試沒有'對象[]值=值;',只需值[0] – acelot
你確定?我運行你的代碼,並且按照你的預期工作。使用這個:'string display = String.Format(「{0} {1} {2}」,FieldName,Op,Value [0]);'NOT this:'string display = String.Format(「{0} { 1} {2}「,FieldName,Op,Value);' –
您是否從您的參數獲得了值,並對您的值進行空值檢查..... – Aravind