Несколько определений из jls объясняют это (глава 14):
Как указано здесь , Block
является StatementWithoutTrailingSubstatement
, который, в свою очередь, является StatementNoShortIf
, который является Statement
. Таким образом, когда требуется какое-либо из них, мы можем вставить Block
.
. Хотя это также относится к for
и while
-loops, я буду использовать if
-значения. Эти правила почти одинаковы. Синтаксическое описание if-statements
можно найти здесь здесь .
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf:
if ( Expression ) StatementNoShortIf else StatementNoShortIf
Итак, мы можем использовать наш блок здесь.
;
определяется как EmptyStatement
( link ), что также является StatementNoShortIf
. Поэтому в условных фрагментах кода, таких как if-statement
и циклы, мы можем заменить Block
на EmptyStatement
, если требуется StatementNoShortIf
или Statement
.
Таким образом, if(Expression)EmptyStatement
works.
Довольно просто: java дает ошибку, если находит недопустимый синтаксис. Но В вашей среде IDE должна быть опция для включения такого предупреждения. Для eclipse см. Ответ if(Expression)EmptyStatement
- вполне допустимый синтаксис. Вместо этого javac
выдает предупреждение при запуске с соответствующими параметрами. Полный список предупреждений, которые могут быть отключены для , для этой цели содержит имя-предупреждение empty
. Таким образом, компиляция с -Xlint:all
или -Xlint:empty
будет генерировать предупреждение об этом. Ctrl + Shift + A
, ввести empty body
в поле поиска и включить предупреждение (помечено на изображении)
Честно говоря, в нем мало пользы с минималистской точки зрения. Обычно есть способ добиться успеха без команды «ничего не делать». Скорее, речь идет о личных предпочтениях, предпочитаете ли вы использовать
if( a() && b() );
или
if( a() ) b();
, и это применимо и к другим случаям, в которых используется EmptyStatement
. Важным моментом для рассмотрения этой темы является читаемость кода. Бывают случаи, когда код становится более читаемым, используя no-op. С другой стороны, есть случаи, когда код становится намного сложнее понять с помощью EmptyStatement
- приведенный выше пример будет рассчитывать на более позднюю IMO.
Я использовал Json.NET с успехом в прошлом.
Пример от сайта:
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string json = JsonConvert.SerializeObject(product);
//{
// "Name": "Apple",
// "Expiry": new Date(1230422400000),
// "Price": 3.99,
// "Sizes": [
// "Small",
// "Medium",
// "Large"
// ]
//}
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);
Проверьте Систему. Время выполнения. Сериализация. Пространство имен Json, включенное с.NET 3.5.
Я записал свой собственный сериализатор JSON с помощью DataContractJsonSerializer в System.ServiceModel.Web.dll
блок [который является компонентом WCF, включенного в.NET 3.5 как стандартный блок, и в.NET 3,5 Клиентских Профиля SP1] (в.NET 4.0 и Silverlight 4, это было перемещено в System.Runtime.Serialization.dll
).
using System.IO;
using System.Runtime.Serialization.Json;
public class JsonObjectSerializer
{
public string Serialize<T>(T instance) where T : class
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var memoryStream = new MemoryStream())
{
serializer.WriteObject(memoryStream, instance);
memoryStream.Flush();
memoryStream.Position = 0;
using (var reader = new StreamReader(memoryStream))
{
return reader.ReadToEnd();
}
}
}
public T Deserialize<T>(string serialized) where T : class
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var memoryStream = new MemoryStream())
{
using (var writer = new StreamWriter(memoryStream))
{
writer.Write(serialized);
writer.Flush();
memoryStream.Position = 0;
return serializer.ReadObject(memoryStream) as T;
}
}
}
}
$selected = $true,$false,$true; @('first','second','third') | % {$i=0}{If($selected[$i]){Спасибо за это - I' d никогда замечаемый, что синтаксис с двумя наборами фигурных скобок после foreach. Это решило проблему совпадения двух массивов как это: [110] для возврата ' first' и ' third'};$i++ }
для возврата ' first' и ' third'
– Rich Moss
27 April 2019 в 09:43
В каркас встроено по крайней мере два.
Более новые: System.Runtime.Serialization.Json
и более старые: System.Web. Script.Serialization
Я предпочитаю не иметь зависимостей от сторонних библиотек. Я работаю с JSON каждый день и никогда не нуждался в чем-то большем, чем то, что уже существует в фреймворке.
Вы также должны попробовать my ServiceStack JsonSerializer - это самый быстрый сериализатор .NET JSON на данный момент , основанный на тестах ведущих сериализаторов JSON и поддерживает сериализацию любого типа POCO, DataContracts, списков / словарей, интерфейсов, Наследование, объекты с поздним связыванием, включая анонимные типы и т. Д.
Базовый пример:
Customer customer = new Customer { Name="Joe Bloggs", Age=31 };
string json = customer.ToJson();
Customer fromJson = json.FromJson<Customer>(json);
dir | % {$i = 46}{ move-item Это работало как очарование, когда я должен был переименовать файлы со счетчиком ~ [110] ("ARM-{0:00000}.pdf" -f $i++)}
– dance2die 16 December 2017 в 06:22