вам нужно добавить класс [System.Serializable]
в PlayerItem
, например:
using System;
[System.Serializable]
public class PlayerItem {
public string playerId;
public string playerLoc;
public string playerNick;
}
Кажется, что ваш реальный вопрос:
Почему:
null >= 0; // true
Но:
null == 0; // false
Что действительно происходит, так это то, что Оператор большего или равного (>=
) выполняет принуждение типа ( ToPrimitive
) с типом hint Number
, на самом деле все реляционные операторы имеют такое поведение.
null
особым образом обрабатывается оператором равенства (==
). Вкратце, только принуждает к undefined
:
null == null; // true
null == undefined; // true
Значения, такие как false
, ''
, '0'
и []
, подлежат к числовому типу принуждения, все из них принуждают к нулю.
Вы можете увидеть внутренние детали этого процесса в Алгоритм сравнения абстрактного равенства и . Абстрактное реляционное сравнение Алгоритм .
В резюме:
ToNumber
. Это то же самое, что добавить перед +
фронт, который для нулевых когерентностей равен 0
. ToNumber
для строк, чисел и логических элементов. Я хотел бы расширить вопрос, чтобы еще больше улучшить видимость проблемы:
null >= 0; //true
null <= 0; //true
null == 0; //false
null > 0; //false
null < 0; //false
Это просто бессмысленно. Как человеческие языки, эти вещи нужно изучать наизусть.
У JavaScript есть как строгие, так и сопоставления типов
null >= 0;
, но (null==0)||(null>0)
- false
null <= 0;
истинно, но (null==0)||(null<0)
- false
"" >= 0
также верно
Для реляционных абстрактных сравнений (& lt; =,> =) операнды сначала преобразуются в примитивы, а затем к тому же типу перед сравнением.
typeof null returns "object"
Когда тип - объект javascript пытается стягивать объект (т. е. null), предпринимаются следующие шаги ( ECMAScript 2015 ):
PreferredType
не был передан, пусть hint
будет «по умолчанию». PreferredType
- hint
String, пусть hint
будет «string». PreferredType
- hint
Число, пусть hint
будет «числом». exoticToPrim
будет GetMethod(input, @@toPrimitive)
. ReturnIfAbrupt(exoticToPrim)
. exoticToPrim
не определено, то a) Пусть результат будет Call(exoticToPrim, input, «hint»)
. b) ReturnIfAbrupt(result)
. c) Если Type(result)
не является объектом, верните результат. d) Выбросить исключение TypeError. hint
является «значением по умолчанию», пусть hint
будет «числом». OrdinaryToPrimitive(input,hint)
. Допустимыми значениями для подсказки являются «по умолчанию», «число» и «строка». Объекты Date уникальны среди встроенных объектов ECMAScript в том смысле, что они рассматривают значение по умолчанию как эквивалентное «string». Все остальные встроенные объекты ECMAScript трактуют «по умолчанию» как эквивалентные «числу». ( ECMAScript 20.3.4.45 )
Итак, я думаю, null
преобразуется в 0.
null is treated in a special way by the Equals Operator (==). In a brief, it only coerces to undefined:
- и что? Можете ли вы объяснить, почемуnull >= 0
? :) – Andrey Deineko 26 June 2016 в 14:01+
фронт, который для нулевых когерентностей равен0
. Равенство только вызывает ToNumber для строк, чисел и булевых. – Michael Liquori 23 August 2016 в 15:32