public static string toLocaleString(object thisObj) { // TODO: Shouldn't this be generic!? SemanticAnalyser.assert_type(thisObj, typeof(ArrayObject)); ArrayObject array_obj = (ArrayObject)thisObj; string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator + " "; Hashtable elems = array_obj.elems; uint n = (uint)array_obj.length; StringBuilder str = new StringBuilder(); bool first = true; for (uint i = 0; i < n; i++) { ScriptObject elem = (ScriptObject)Convert.ToObject(elems [i], null); if (!first && elem != null) { str.Append(separator); } first = false; if (elem != null) { str.Append(Convert.ToString(elem.CallMethod("toLocaleString", new object [] { }))); } } return(str.ToString()); }
public static string ToString(object value, bool explicitOK) { IConvertible ic = value as IConvertible; TypeCode tc = Convert.GetTypeCode(value, ic); switch (tc) { case TypeCode.Empty: return("undefined"); case TypeCode.DBNull: return("null"); case TypeCode.Boolean: bool r = (bool)value; if (r) { return("true"); } else { return("false"); } case TypeCode.Char: return(ic.ToInt16(null).ToString()); case TypeCode.String: return(ic.ToString(null)); case TypeCode.Object: if (value is StringObject) { return(((StringObject)value).value); } else if (value is ScriptObject) { ScriptObject obj_value = (ScriptObject)value; if (obj_value.HasMethod("toString")) { return((string)obj_value.CallMethod("toString")); } else { return((string)ObjectPrototype.smartToString((JSObject)obj_value)); } } Console.WriteLine("value.GetType = {0}", value.GetType()); throw new NotImplementedException(); default: if (IsNumberTypeCode(tc)) { double val = ic.ToDouble(null); return(ToString(val)); } Console.WriteLine("tc = {0}", tc); throw new NotImplementedException(); } }