Пример #1
0
        private bool TryGetErrorProperty <T>(JavaScriptValueSafeHandle error, string propertyName, out T value)
        {
            JsErrorCode innerError;

            innerError = LibChakraCore.JsCreatePropertyId(propertyName, (ulong)propertyName.Length, out JavaScriptPropertyIdSafeHandle propertyHandle);
            innerError = LibChakraCore.JsHasProperty(error, propertyHandle, out bool hasProperty);

            if (hasProperty == true)
            {
                innerError = LibChakraCore.JsGetProperty(error, propertyHandle, out JavaScriptValueSafeHandle propertyValue);
                innerError = LibChakraCore.JsGetValueType(propertyValue, out JsValueType propertyType);
                switch (propertyType)
                {
                case JsValueType.Number:
                    innerError = LibChakraCore.JsNumberToDouble(propertyValue, out double doubleValue);
                    value      = (T)Convert.ChangeType(doubleValue, typeof(T));
                    return(true);

                case JsValueType.String:
                    var strValue = Helpers.GetStringUtf8(propertyValue, releaseHandle: true);
                    value = (T)Convert.ChangeType(strValue, typeof(T));
                    return(true);

                default:
                    value = default(T);
                    return(false);
                }
            }

            value = default(T);
            return(false);
        }