Библиотека "Стандартный" приложения C
Общие сведения C.1
Соответствующая реализация C# должна предоставлять минимальный набор типов с определенной семантикой. Эти типы и их члены перечислены здесь в алфавитном порядке по пространству имен и типу. Официальное определение этих типов и их членов см. в статье ISO/IEC 23271:2012 Common Language Infrastructure (CLI), Partition IV; Библиотека базовых классов (BCL), расширенная числовая библиотека и расширенная библиотека массивов, включенные в эту спецификацию.
Этот текст является информативным.
Стандартная библиотека предназначена для минимального набора типов и элементов, необходимых для соответствующей реализации C#. Таким образом, он содержит только те элементы, которые явно требуются спецификацией языка C#.
Ожидается, что соответствующая реализация C# предоставит значительно более обширную библиотеку, которая позволяет писать полезные программы. Например, соответствующая реализация может расширить эту библиотеку по
- Добавление пространств имен.
- Добавление типов.
- Добавление членов в типы, отличные от интерфейса.
- Добавление промежуточных базовых классов или интерфейсов.
- Наличие структур и типов классов реализует дополнительные интерфейсы.
- Добавление атрибутов (кроме ) в существующие
ConditionalAttribute
типы и элементы.
Конец информативного текста.
Стандартные типы библиотек C.2, определенные в ISO/IEC 23271
Примечание. Некоторые
struct
типы ниже имеютreadonly
модификатор. Этот модификатор недоступен при выпуске ISO/IEC 23271, но необходим для соответствия реализации этой спецификации. конечная заметка
namespace System
{
public delegate void Action();
public class ArgumentException : SystemException
{
public ArgumentException();
public ArgumentException(string message);
public ArgumentException(string message, Exception innerException);
}
public class ArithmeticException : Exception
{
public ArithmeticException();
public ArithmeticException(string message);
public ArithmeticException(string message, Exception innerException);
}
public abstract class Array : IList, ICollection, IEnumerable
{
public int Length { get; }
public int Rank { get; }
public int GetLength(int dimension);
}
public class ArrayTypeMismatchException : Exception
{
public ArrayTypeMismatchException();
public ArrayTypeMismatchException(string message);
public ArrayTypeMismatchException(string message,
Exception innerException);
}
[AttributeUsageAttribute(AttributeTargets.All, Inherited = true,
AllowMultiple = false)]
public abstract class Attribute
{
protected Attribute();
}
public enum AttributeTargets
{
Assembly = 0x1,
Module = 0x2,
Class = 0x4,
Struct = 0x8,
Enum = 0x10,
Constructor = 0x20,
Method = 0x40,
Property = 0x80,
Field = 0x100,
Event = 0x200,
Interface = 0x400,
Parameter = 0x800,
Delegate = 0x1000,
ReturnValue = 0x2000,
GenericParameter = 0x4000,
All = 0x7FFF
}
[AttributeUsageAttribute(AttributeTargets.Class, Inherited = true)]
public sealed class AttributeUsageAttribute : Attribute
{
public AttributeUsageAttribute(AttributeTargets validOn);
public bool AllowMultiple { get; set; }
public bool Inherited { get; set; }
public AttributeTargets ValidOn { get; }
}
public readonly struct Boolean { }
public readonly struct Byte { }
public readonly struct Char { }
public readonly struct Decimal { }
public abstract class Delegate { }
public class DivideByZeroException : ArithmeticException
{
public DivideByZeroException();
public DivideByZeroException(string message);
public DivideByZeroException(string message, Exception innerException);
}
public readonly struct Double { }
public abstract class Enum : ValueType
{
protected Enum();
}
public class Exception
{
public Exception();
public Exception(string message);
public Exception(string message, Exception innerException);
public sealed Exception InnerException { get; }
public virtual string Message { get; }
}
public class GC { }
public interface IDisposable
{
void Dispose();
}
public interface IFormattable { }
public sealed class IndexOutOfRangeException : Exception
{
public IndexOutOfRangeException();
public IndexOutOfRangeException(string message);
public IndexOutOfRangeException(string message,
Exception innerException);
}
public readonly struct Int16 { }
public readonly struct Int32 { }
public readonly struct Int64 { }
public readonly struct IntPtr { }
public class InvalidCastException : Exception
{
public InvalidCastException();
public InvalidCastException(string message);
public InvalidCastException(string message, Exception innerException);
}
public class InvalidOperationException : Exception
{
public InvalidOperationException();
public InvalidOperationException(string message);
public InvalidOperationException(string message,
Exception innerException);
}
public class NotSupportedException : Exception
{
public NotSupportedException();
public NotSupportedException(string message);
public NotSupportedException(string message,
Exception innerException);
}
public struct Nullable<T>
{
public bool HasValue { get; }
public T Value { get; }
}
public class NullReferenceException : Exception
{
public NullReferenceException();
public NullReferenceException(string message);
public NullReferenceException(string message, Exception innerException);
}
public class Object
{
public Object();
~Object();
public virtual bool Equals(object obj);
public virtual int GetHashCode();
public Type GetType();
public virtual string ToString();
}
[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Enum | AttributeTargets.Interface |
AttributeTargets.Constructor | AttributeTargets.Method |
AttributeTargets.Property | AttributeTargets.Field |
AttributeTargets.Event | AttributeTargets.Delegate, Inherited = false)]
public sealed class ObsoleteAttribute : Attribute
{
public ObsoleteAttribute();
public ObsoleteAttribute(string message);
public ObsoleteAttribute(string message, bool error);
public bool IsError { get; }
public string Message { get; }
}
public class OutOfMemoryException : Exception
{
public OutOfMemoryException();
public OutOfMemoryException(string message);
public OutOfMemoryException(string message, Exception innerException);
}
public class OverflowException : ArithmeticException
{
public OverflowException();
public OverflowException(string message);
public OverflowException(string message, Exception innerException);
}
public readonly struct SByte { }
public readonly struct Single { }
public sealed class StackOverflowException : Exception
{
public StackOverflowException();
public StackOverflowException(string message);
public StackOverflowException(string message, Exception innerException);
}
public sealed class String : IEnumerable<Char>, IEnumerable
{
public int Length { get; }
public char this [int index] { get; }
public static string Format(string format, params object[] args);
}
public abstract class Type : MemberInfo { }
public sealed class TypeInitializationException : Exception
{
public TypeInitializationException(string fullTypeName,
Exception innerException);
}
public readonly struct UInt16 { }
public readonly struct UInt32 { }
public readonly struct UInt64 { }
public readonly struct UIntPtr { }
public abstract class ValueType
{
protected ValueType();
}
}
namespace System.Collections
{
public interface ICollection : IEnumerable
{
int Count { get; }
bool IsSynchronized { get; }
object SyncRoot { get; }
void CopyTo(Array array, int index);
}
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
public interface IList : ICollection, IEnumerable
{
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this [int index] { get; set; }
int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
}
}
namespace System.Collections.Generic
{
public interface ICollection<T> : IEnumerable<T>
{
int Count { get; }
bool IsReadOnly { get; }
void Add(T item);
void Clear();
bool Contains(T item);
void CopyTo(T[] array, int arrayIndex);
bool Remove(T item);
}
public interface IEnumerable<T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
public interface IEnumerator<T> : IDisposable, IEnumerator
{
T Current { get; }
}
public interface IList<T> : ICollection<T>
{
T this [int index] { get; set; }
int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
}
}
namespace System.Diagnostics
{
[AttributeUsageAttribute(AttributeTargets.Method | AttributeTargets.Class,
AllowMultiple = true)]
public sealed class ConditionalAttribute : Attribute
{
public ConditionalAttribute(string conditionString);
public string ConditionString { get; }
}
}
namespace System.Reflection
{
public abstract class MemberInfo
{
protected MemberInfo();
}
}
namespace System.Runtime.CompilerServices
{
public sealed class IndexerNameAttribute : Attribute
{
public IndexerNameAttribute(String indexerName);
}
public static class Unsafe
{
public static ref T NullRef<T>();
}
}
namespace System.Threading
{
public static class Monitor
{
public static void Enter(object obj);
public static void Exit(object obj);
}
}
Типы стандартной библиотеки C.3, не определенные в ISO/IEC 23271
Следующие типы, включая перечисленные члены, должны быть определены в соответствующей стандартной библиотеке. (Эти типы могут быть определены в будущем выпуске ISO/IEC 23271.) Ожидается, что многие из этих типов будут иметь больше элементов, чем перечислены.
Соответствующая реализация может предоставлять Task.GetAwaiter()
и Task<TResult>.GetAwaiter()
как методы расширения.
namespace System
{
public class FormattableString : IFormattable { }
public class OperationCanceledException : Exception
{
public OperationCanceledException();
public OperationCanceledException(string message);
public OperationCanceledException(string message, Exception innerException);
}
public readonly ref struct ReadOnlySpan<T>
{
public int Length { get; }
public ref readonly T this[int index] { get; }
}
public readonly ref struct Span<T>
{
public int Length { get; }
public ref T this[int index] { get; }
public static implicit operator ReadOnlySpan<T>(Span<T> span);
}
public struct ValueTuple<T1>
{
public T1 Item1;
public ValueTuple(T1 item1);
}
public struct ValueTuple<T1, T2>
{
public T1 Item1;
public T2 Item2;
public ValueTuple(T1 item1, T2 item2);
}
public struct ValueTuple<T1, T2, T3>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public ValueTuple(T1 item1, T2 item2, T3 item3);
}
public struct ValueTuple<T1, T2, T3, T4>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4);
}
public struct ValueTuple<T1, T2, T3, T4, T5>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5);
}
public struct ValueTuple<T1, T2, T3, T4, T5, T6>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public T6 Item6;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5,
T6 item6);
}
public struct ValueTuple<T1, T2, T3, T4, T5, T6, T7>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public T6 Item6;
public T7 Item7;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5,
T6 item6, T7 item7);
}
public struct ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public T6 Item6;
public T7 Item7;
public TRest Rest;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5,
T6 item6, T7 item7, TRest rest);
}
}
namespace System.Collections.Generic
{
public interface IReadOnlyCollection<out T> : IEnumerable<T>
{
int Count { get; }
}
public interface IReadOnlyList<out T> : IReadOnlyCollection<T>
{
T this [int index] { get; }
}
}
namespace System.Linq.Expressions
{
public sealed class Expression<TDelegate>
{
public TDelegate Compile();
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Interface,
Inherited = false, AllowMultiple = false)]
public sealed class AsyncMethodBuilderAttribute : Attribute
{
public AsyncMethodBuilderAttribute(Type builderType) {}
public Type BuilderType { get; }
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerFilePathAttribute : Attribute
{
public CallerFilePathAttribute() { }
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerLineNumberAttribute : Attribute
{
public CallerLineNumberAttribute() { }
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerMemberNameAttribute : Attribute
{
public CallerMemberNameAttribute() { }
}
public static class FormattableStringFactory
{
public static FormattableString Create(string format,
params object[] arguments);
}
public interface ICriticalNotifyCompletion : INotifyCompletion
{
void UnsafeOnCompleted(Action continuation);
}
public interface INotifyCompletion
{
void OnCompleted(Action continuation);
}
public readonly struct TaskAwaiter : ICriticalNotifyCompletion,
INotifyCompletion
{
public bool IsCompleted { get; }
public void GetResult();
}
public readonly struct TaskAwaiter<TResult> : ICriticalNotifyCompletion,
INotifyCompletion
{
public bool IsCompleted { get; }
public TResult GetResult();
}
public readonly struct ValueTaskAwaiter : ICriticalNotifyCompletion,
INotifyCompletion
{
public bool IsCompleted { get; }
public void GetResult();
}
public readonly struct ValueTaskAwaiter<TResult>
: ICriticalNotifyCompletion, INotifyCompletion
{
public bool IsCompleted { get; }
public TResult GetResult();
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property,
Inherited=false)]
public sealed class AllowNullAttribute : Attribute
{
public AllowNullAttribute() { }
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property,
Inherited=false)]
public sealed class DisallowNullAttribute : Attribute
{
public DisallowNullAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class DoesNotReturnAttribute : Attribute
{
public DoesNotReturnAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class DoesNotReturnIfAttribute : Attribute
{
public DoesNotReturnIfAttribute(bool parameterValue) {}
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property |
System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class MaybeNullAttribute : Attribute
{
public MaybeNullAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class MaybeNullWhenAttribute : Attribute
{
public MaybeNullWhenAttribute(bool returnValue) {}
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property |
System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class NotNullAttribute : Attribute
{
public NotNullAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter |
System.AttributeTargets.Property | System.AttributeTargets.ReturnValue,
AllowMultiple=true, Inherited=false)]
public sealed class NotNullIfNotNullAttribute : Attribute
{
public NotNullIfNotNullAttribute(string parameterName) {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class NotNullWhenAttribute : Attribute
{
public NotNullWhenAttribute(bool returnValue) {}
}
}
namespace System.Threading.Tasks
{
public class Task
{
public System.Runtime.CompilerServices.TaskAwaiter GetAwaiter();
}
public class Task<TResult> : Task
{
public new System.Runtime.CompilerServices.TaskAwaiter<T> GetAwaiter();
}
public readonly struct ValueTask : System.IEquatable<ValueTask>
{
public System.Runtime.CompilerServices.ValueTaskAwaiter GetAwaiter();
}
public readonly struct ValueTask<TResult>
: System.IEquatable<ValueTask<TResult>>
{
public new System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>
GetAwaiter();
}
}
Спецификации формата C.4
Значение форматов, используемых в интерполированных строковых выражениях (§12.8.3), определяются в ISO/IEC 23271:2012. Для удобства следующий текст копируется из описания System.IFormattable
.
Этот текст является информативным.
Формат — это строка, описывающая внешний вид объекта при преобразовании в строку. Можно использовать стандартные или пользовательские форматы. Стандартный формат принимает форму Axx, где A является одним алфавитным символом, называемым описательом формата, и xx — целое число от нуля до 99 включительно, называемое описатель точности. Описатель формата управляет типом форматирования, примененным к значению, представленному в виде строки. Описатель точности определяет количество значимых цифр или десятичных разрядов в строке, если применимо.
Примечание. Список описателей стандартного формата см. в таблице ниже. Обратите внимание, что указанный тип данных, например
System.Int32
, может не поддерживать один или несколько описателей стандартного формата. конечная заметка
Примечание. Если формат включает символы, которые зависят от языка и региональных параметров, таких как денежный символ, включенный в форматы "C" и "c", объект форматирования предоставляет фактические символы, используемые в строковом представлении. Метод может включать параметр для передачи
System.IFormatProvider
объекта, предоставляющего объект форматирования, или метод может использовать объект форматирования по умолчанию, содержащий определения символов для текущего языка и региональных параметров. Текущий язык и региональные параметры обычно используют тот же набор символов, используемых системой по умолчанию. В библиотеке базовых классов объект форматирования для системных числовых типов является экземпляромSystem.Globalization.NumberFormatInfo
. НапримерSystem.DateTime
, используется объектSystem.Globalization.DateTimeFormatInfo
. конечная заметка
В следующей таблице описаны описатели стандартного формата и связанные элементы объекта форматирования, используемые с числовыми типами данных в библиотеке базовых классов.
Описатель формата | Description |
---|---|
|
Формат валюты: используется для строк, содержащих денежное значение. ,
Если описатель точности опущен, |
|
Десятичный формат: (этот формат действителен только при указании целочисленных типов данных.) Используется для строк, содержащих целые значения. Отрицательные числа префиксируются символом отрицательного числа, заданным свойством Описатель точности определяет минимальное количество цифр, отображаемых в строке. Если указанная точность требует больше цифр, чем значение содержит, строка остается левой с нулями. Если описатель точности задает меньше цифр, чем в значении, то описатель точности игнорируется. |
|
Научный (инженерный) формат: используется для строк в одной из следующих форм: [-]m.dddddE+xxx [-]m.dddddddDE-xxx [-]m.ddddddde+xxx [-]m.ddddde-xxx Символ отрицательного числа ('-) отображается только в том случае, если значение отрицательное и предоставляется свойством Ровно одна десятичная цифра (m) предшествует десятичному разделителю ('.), который предоставляется свойством Описатель точности определяет количество десятичных разрядов (dddddd) в строке. Если описатель точности опущен, в строку включены шесть десятичных разрядов. Экспонент (+/-xxx) состоит из символа положительного или отрицательного числа, за которым следует не менее трех цифр (xxx). Экспонент по левому краю с нулями при необходимости. Регистр описателя формата (E или e) определяет регистр, используемый для префикса экспонента (E или e) в строке. Результаты округляются до ближайшего представляющего значения при необходимости. Символ положительного числа предоставляется свойством |
|
Формат фиксированной точки: используется для строк в следующей форме: [-]m.dd... d По крайней мере одна десятичная цифра (m) предшествует десятичному разделителю ('.), который предоставляется свойством Знак символа отрицательного числа ('-) предшествует m только в том случае, если значение отрицательное. Этот символ предоставляется свойством Описатель точности определяет число десятичных разрядов (dd... d) в строке. Если описатель точности опущен, |
|
Общий формат: строка форматируется в формате фиксированной точки (F или F) или научном формате (E или e). Для целочисленных типов: Значения форматируются с помощью формата фиксированной точки, если описатель точности экспонент< , где экспонент является экспонентом значения в научном формате. Для всех остальных значений используется научный формат. Если описатель точности опущен, точность по умолчанию равна ширине поля, необходимой для отображения максимального значения типа данных, что приводит к форматированию значения в формате фиксированной точки. Точность по умолчанию для целочисленных типов выглядит следующим образом:
Для отдельных, десятичных и двойных типов: Значения форматируются с помощью формата фиксированной точки, если экспонент ≥ -4 и описатель точности экспоненты, где < является экспонентом значения в научном формате. Для всех остальных значений используется научный формат. Результаты округляются до ближайшего представляющего значения при необходимости. Если описатель точности опущен, используются следующие значения по умолчанию:
Для всех типов:
|
|
Числовой формат: используется для строк в следующей форме: [-]d,ddd,ddd.ddd... d Представление отрицательных значений определяется свойством По крайней мере одна десятичная цифра (d) предшествует десятичному разделителю ('.), который предоставляется свойством Описатель точности определяет число десятичных разрядов (dd... d). Если описатель точности опущен, |
|
Формат процента: используется для строк, содержащих процент. ,
Если точность не указана, число десятичных разрядов в результатах определяется Результат масштабируется на 100 (.99 становится 99%). |
|
Формат круглого пути: (этот формат действителен только при указании с System.Double или System.Single .) Используется для обеспечения точности строкового представления значения с плавающей запятой, поэтому анализ строки не приводит к потере точности при сравнении с исходным значением. Если максимальная точность типа данных (7 для System.Single и 15 для System.Double ) приведет к потере точности, точность увеличивается на два десятичных разряда. Если описатель точности поставляется с этим описателям формата, он игнорируется. Этот формат идентичен формату фиксированной точки. |
|
Шестнадцатеричный формат: (этот формат действителен только при указании целочисленных типов данных.) Используется для строковых представлений чисел в Base 16. Точность определяет минимальное количество цифр в строке. Если точность задает больше цифр, чем число содержит, число слева от нуля. Регистр описателя формата ("X" или "x") определяет, используются ли буквы верхнего или нижнего регистра в шестнадцатеричном представлении. |
Если числовое значение является значением System.Single
или значением System.Double
, NaN
или PositiveInfinity
описатель формата игнорируется, и возвращается одно из следующих значений: NegativeInfinity
или System.Globalization.NumberFormatInfo.NaNSymbol
System.Globalization.NumberFormatInfo.PositiveInfinitySymbol
.System.Globalization.NumberFormatInfo.NegativeInfinitySymbol
Настраиваемый формат — это любая строка, указанная как формат, который не находится в виде стандартной строки формата (Axx), описанной выше. В следующей таблице описываются символы, используемые в создании пользовательских форматов.
Описатель формата | Description |
---|---|
0 (ноль) |
Нулевой заполнитель: если отформатированное значение имеет цифру в позиции, в которой значение "0" отображается в пользовательском формате, то эта цифра копируется в выходную строку; в противном случае ноль хранится в этой позиции в выходной строке. Позиция крайнего левого "0" перед десятичным разделителем и самым правым "0" после десятичного разделителя определяет диапазон цифр, которые всегда присутствуют в выходной строке. Число заполнителей "Ноль" и (или) "Цифры" после десятичного разделителя определяет количество цифр, отображаемых после десятичного разделителя. Значения округляются по мере необходимости. |
# |
Заполнитель цифр: если форматируемое значение имеет цифру в позиции, в которой символ #отображается в пользовательском формате, то эта цифра копируется в выходную строку; в противном случае ничего не хранится в этой позиции в выходной строке. Обратите внимание, что этот описатель никогда не сохраняет символ "0", если это не значимая цифра, даже если "0" является единственной цифрой в строке. (Он отображает символ "0" в выходной строке, если это значимая цифра.) Число заполнителей "Ноль" и (или) "Цифры" после десятичного разделителя определяет количество цифр, отображаемых после десятичного разделителя. Значения округляются по мере необходимости. |
. (период) |
Десятичный разделитель: левая часть "".
символ в строке формата определяет расположение десятичного разделителя в отформатируемом значении; любое дополнительное ". Символы игнорируются. Свойство System.Globalization.NumberFormatInfo.NumberDecimalSeparator определяет символ, используемый в качестве десятичного разделителя. |
, (запятая) |
Разделитель групп и масштабирование чисел: символ "," служит двумя целями. Во-первых, если настраиваемый формат содержит этот символ между двумя заполнителями нуля или цифр (0 или #) и слева от десятичного разделителя, если он присутствует, выходные данные будут иметь разделители групп, вставляемые между каждой группой цифр слева от десятичного разделителя.
Если строка форматирования содержит один или несколько символов," сразу слева от десятичного разделителя, число будет масштабировано. Коэффициент масштабирования определяется числом символов разделителя групп сразу слева от десятичного разделителя. Если имеются символы x, то значение делится на 1000X перед форматированием. Например, строка формата "0", разделит значение на один миллион. Обратите внимание, что наличие символа ", указывающее, что масштабирование не вставляет разделители групп в выходную строку. Таким образом, чтобы масштабировать число на 1 миллион и вставлять разделители групп, используйте настраиваемый формат, аналогичный "##0", |
% (процент) |
Заполнитель процента: наличие символа "%" в пользовательском формате приводит к умножению числа на 100 до форматирования. Символ процента вставляется в выходную строку в расположении, где отображается "%" в строке формата. Свойство System.Globalization.NumberFormatInfo.PercentSymbol определяет символ процента. |
|
Формат инженерии: если какая-либо из строк "E", "E+", "E-", "e", "e+" или "e-" присутствует в пользовательском формате и следует сразу же один символ "0", то значение отформатировано с помощью научной нотации. Число символов "0" после экспонентного префикса (E или e) определяет минимальное количество цифр в экспоненте. Форматы E+и E+указывают на то, что символ положительного или отрицательного числа всегда предшествует экспоненте. Форматы "E", "E-", "e" или "e-" указывают на то, что символ отрицательного числа предшествует отрицательным экспонентам; символ не предшествует положительным экспонентам. Символ положительного числа предоставляется свойством System.Globalization.NumberFormatInfo.PositiveSign . Символ отрицательного числа предоставляется свойством System.Globalization.NumberFormatInfo.NegativeSign . |
\ (обратная косая черта) |
Escape-символ: на некоторых языках, таких как C#, символ обратной косой черты приводит к интерпретации следующего символа в пользовательском формате в виде escape-последовательности. Он используется с последовательности форматирования языка C, например "\n" (newline). На некоторых языках сам escape-символ должен предшествовать escape-символу при использовании в качестве литерала. В противном случае компилятор интерпретирует символ как escape-последовательность. Этот escape-символ не требуется поддерживать во всех языках программирования. |
|
Литеральная строка: символы, заключенные в одинарные или двойные кавычки, копируются в выходную строку буквально и не влияют на форматирование. |
; (точка с запятой) |
Разделитель разделов: символ ";" используется для разделения разделов для положительных, отрицательных и нули чисел в строке формата. (Эта функция подробно описана ниже.) |
Другие | Все остальные символы: все остальные символы хранятся в выходной строке как литералы в позиции, в которой они отображаются. |
Обратите внимание, что для строк формата фиксированной точки (строки, не содержащие значения E0, E+0, E-0, E-0, e0, e+0 или e-0), числа округляются до сколько десятичных разрядов, справа от десятичного разделителя. Если пользовательский формат не содержит десятичный разделитель, число округляется до ближайшего целого числа. Если число имеет больше цифр, чем заполнители "Ноль" или "Цифры" слева от десятичного разделителя, дополнительные цифры копируются в выходную строку непосредственно перед первым заполнителем "Нуль" или "Цифра".
Настраиваемый формат может содержать до трех разделов, разделенных символами разделителя разделов, чтобы указать различные форматы для положительных, отрицательных и нулевые значений. Разделы интерпретируются следующим образом:
Один раздел: настраиваемый формат применяется ко всем значениям (положительным, отрицательным и нулевым). Отрицательные значения включают отрицательный знак.
Два раздела: первый раздел применяется к положительным значениям и нулям, а второй раздел применяется к отрицательным значениям. Если значение форматирования отрицательное, но становится ноль после округления в соответствии с форматом во втором разделе, то результирующий ноль форматируется в соответствии с первым разделом. Отрицательные значения не включают отрицательный знак, чтобы обеспечить полный контроль над представлениями отрицательных значений. Например, отрицательные значения можно представить в скобках с помощью настраиваемого формата, аналогичного '###.#### (####.####)’.
Три раздела: первый раздел применяется к положительным значениям, второй раздел применяется к отрицательным значениям, а третий раздел применяется к нулям. Второй раздел может быть пустым (ничего не отображается между точкой с запятой), в этом случае первый раздел применяется ко всем ненулевым значениям, а отрицательные значения включают отрицательный знак. Если число, которое должно быть отформатировано, ненулево, но становится нулевым после округления в соответствии с форматом в первом или втором разделе, то результирующий ноль форматируется в соответствии с третьим разделом.
System.Enum
System.DateTime
Типы также поддерживают использование описателей формата для форматирования строковых представлений значений. Значение определенного описателя формата зависит от типа данных (числовых, дат и времени, перечисления).
System.Enum
Полный System.Globalization.DateTimeFormatInfo
список описателей формата, поддерживаемых каждым типом.
Сокращены тип библиотеки C.5
В этой спецификации ссылаются следующие типы библиотек. Полные имена этих типов, включая квалификатор глобального пространства имен, перечислены ниже. В рамках этой спецификации эти типы отображаются как полное имя; с квалификатором глобального пространства имен опущен; или как простое некавалифицированное имя типа, а пространство имен также опущено. Например, тип ICollection<T>
, используемый в этой спецификации, всегда означает тип global::System.Collections.Generic.ICollection<T>
.
global::System.Action
global::System.ArgumentException
global::System.ArithmeticException
global::System.Array
global::System.ArrayTypeMisMatchException
global::System.Attribute
global::System.AttributeTargets
global::System.AttributeUsageAttribute
global::System.Boolean
global::System.Byte
global::System.Char
global::System.Collections.Generic.ICollection<T>
global::System.Collections.Generic.IEnumerable<T>
global::System.Collections.Generic.IEnumerator<T>
global::System.Collections.Generic.IList<T>
global::System.Collections.Generic.IReadonlyCollection<out T>
global::System.Collections.Generic.IReadOnlyList<out T>
global::System.Collections.ICollection
global::System.Collections.IEnumerable
global::System.Collections.IList
global::System.Collections.IEnumerator
global::System.Decimal
global::System.Delegate
global::System.Diagnostics.ConditionalAttribute
global::System.DivideByZeroException
global::System.Double
global::System.Enum
global::System.Exception
global::System.GC
global::System.ICollection
global::System.IDisposable
global::System.IEnumerable
global::System.IEnumerable<out T>
global::System.IList
global::System.IndexOutOfRangeException
global::System.Int16
global::System.Int32
global::System.Int64
global::System.IntPtr
global::System.InvalidCastException
global::System.InvalidOperationException
global::System.Linq.Expressions.Expression<TDelegate>
global::System.MemberInfo
global::System.NotSupportedException
global::System.Nullable<T>
global::System.NullReferenceException
global::System.Object
global::System.ObsoleteAttribute
global::System.OutOfMemoryException
global::System.OverflowException
global::System.Runtime.CompilerServices.CallerFileAttribute
global::System.Runtime.CompilerServices.CallerLineNumberAttribute
global::System.Runtime.CompilerServices.CallerMemberNameAttribute
global::System.Runtime.CompilerServices.ICriticalNotifyCompletion
global::System.Runtime.CompilerServices.IndexerNameAttribute
global::System.Runtime.CompilerServices.INotifyCompletion
global::System.Runtime.CompilerServices.TaskAwaiter
global::System.Runtime.CompilerServices.TaskAwaiter<T>
global::System.SByte
global::System.Single
global::System.StackOverflowException
global::System.String
global::System.SystemException
global::System.Threading.Monitor
global::System.Threading.Tasks.Task
global::System.Threading.Tasks.Task<TResult>
global::System.Type
global::System.TypeInitializationException
global::System.UInt16
global::System.UInt32
global::System.UInt64
global::System.UIntPtr
global::System.ValueType
Конец информативного текста.
ECMA C# draft specification