次の方法で共有


付属書 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 のリリース時には使用できませんでしたが、この仕様の実装に準拠するために必要です。 end note

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の説明から次のテキストがコピーされます。

このテキストは有益です。

format は、オブジェクトが文字列に変換されたときの外観を表す文字列です。 標準形式またはカスタム形式を使用できます。 標準形式は Axx という形式になります。ここで、 Aformat specifier と呼ばれる 1 文字の英字で、 xx は 0 から 99 までの整数で、 precision 指定子と呼ばれます。 書式指定子は、文字列として表される値に適用される書式設定の種類を制御します。 precision 指定子は、文字列内の有効桁数または小数点以下桁数 (該当する場合) を制御します。

: 標準書式指定子の一覧については、次の表を参照してください。 System.Int32などの特定のデータ型では、1 つ以上の標準書式指定子がサポートされない場合があることに注意してください。 end note

: 書式にカルチャによって異なる記号 ('C' 形式や 'c' 形式に含まれる currencysymbol など) が含まれている場合、書式設定オブジェクトは文字列表現で使用される実際の文字を提供します。 メソッドには、書式設定オブジェクトを提供する System.IFormatProvider オブジェクトを渡すパラメーターが含まれている場合や、現在のカルチャのシンボル定義を含む既定の書式設定オブジェクトを使用する場合があります。 現在のカルチャでは、通常、既定でシステム全体で使用されているのと同じシンボル セットが使用されます。 基本クラス ライブラリでは、システム指定の数値型の書式設定オブジェクトは System.Globalization.NumberFormatInfo インスタンスです。 System.DateTimeインスタンスの場合は、System.Globalization.DateTimeFormatInfoが使用されます。 end note

次の表では、基本クラス ライブラリの数値データ型で使用される標準書式指定子と関連する書式設定オブジェクト メンバーについて説明します。

書式指定子 説明

C

c

通貨形式: 通貨値を含む文字列に使用されます。 System.Globalization.NumberFormatInfo.CurrencySymbolSystem.Globalization.NumberFormatInfo.CurrencyGroupSizesSystem.Globalization.NumberFormatInfo.CurrencyGroupSeparatorSystem.Globalization.NumberFormatInfo.CurrencyDecimalSeparator、およびSystem.Globalization.NumberFormatInfoメンバーは、それぞれ通貨記号、数字グループのサイズと区切り記号、および小数点を指定します。

System.Globalization.NumberFormatInfo.CurrencyNegativePatternSystem.Globalization.NumberFormatInfo.CurrencyPositivePattern 負の値と正の値を表すために使用される記号を決定します。 たとえば、負の値の前にマイナス記号を付けたり、かっこで囲んだりすることができます。

精度指定子を省略すると、 System.Globalization.NumberFormatInfo.CurrencyDecimalDigits は文字列内の小数点以下の桁数を決定します。 必要に応じて、結果は最も近い表現可能な値に丸められます。

D

d

Decimal Format: (この形式は整数データ型で指定されている場合にのみ有効です)。整数値を含む文字列に使用されます。 負の数値には、 System.Globalization.NumberFormatInfo.NegativeSign プロパティで指定された負の数値記号が付きます。

精度指定子は、文字列に表示される最小桁数を決定します。 指定した有効桁数に含まれる数値よりも多くの桁数が必要な場合、文字列はゼロで左に埋められます。 有効桁数指定子が指定する桁数が値よりも少ない場合、有効桁数指定子は無視されます。

E

e

科学 (エンジニアリング) 形式: 次のいずれかの形式の文字列に使用されます。

          [-]m.ddddddE+xxx

          [-]m.ddddddE-xxx

          [-]m.dddddde+xxx

          [-]m.dddddde-xxx

負の数値記号 ('-') は、値が負の値であり、 System.Globalization.NumberFormatInfo.NegativeSign プロパティによって提供される場合にのみ表示されます。

0 以外の 10 進数 (m) が小数点 ('.') の前に置き、 System.Globalization.NumberFormatInfo.NumberDecimalSeparator プロパティによって指定されます。

精度指定子は、文字列内の小数点以下の桁数 (ddddddd) を決定します。 有効桁数指定子を省略すると、小数点以下 6 桁が文字列に含まれます。

指数 (+/-xxx) は、正または負の数の記号の後に 3 桁以上 (xxx) で構成されます。 指数は、必要に応じてゼロで左に埋められます。 書式指定子 ('E' または 'e') の大文字と小文字は、文字列の指数プレフィックス (E または e) に使用されるケースを決定します。 必要に応じて、結果は最も近い表現可能な値に丸められます。 正の数値記号は、 System.Globalization.NumberFormatInfo.PositiveSign プロパティによって指定されます。

F

f

固定小数点形式: 次の形式の文字列に使用されます。

          [-]m.dd...d

0 以外の 10 進数 (m) の前に小数点 ('.') が 1 つ以上付いています。これは、 System.Globalization.NumberFormatInfo.NumberDecimalSeparator プロパティによって提供されます。

負の数値記号 ('-') は、値が負の場合にのみm の前にあります。 このシンボルは、 System.Globalization.NumberFormatInfo.NegativeSign プロパティによって提供されます。

精度指定子は、小数点以下の桁数 (dd...d) を指定します。 精度指定子を省略すると、 System.Globalization.NumberFormatInfo.NumberDecimalDigits は文字列内の小数点以下の桁数を決定します。 必要に応じて、結果は最も近い表現可能な値に丸められます。

G

g

General Format: 文字列は、固定小数点形式 ('F' または 'f') または科学形式 ('E' または 'e') で書式設定されます。

整数型の場合:

exponent<精度指定子の場合、値は固定小数点形式を使用して書式設定されます。ここで、exponent は指数形式の値の指数です。 その他のすべての値には、科学的な形式が使用されます。

精度指定子を省略すると、データ型の最大値を表示するために必要なフィールド幅と同じ既定の有効桁数が使用され、その結果、値が固定小数点形式で書式設定されます。 整数型の既定の有効桁数は次のとおりです。

          System.Int16System.UInt16 : 5

          System.Int32System.UInt32 : 10

          System.Int64System.UInt64 : 19

Single 型、Decimal 型、Double 型の場合:

exponent ≥ -4 および exponent< 精度指定子の場合、値は固定小数点形式で書式設定されます。ここでexponentは指数形式の値の指数です。 その他のすべての値には、科学的な形式が使用されます。 必要に応じて、結果は最も近い表現可能な値に丸められます。

精度指定子を省略すると、次の既定の有効桁数が使用されます。

          System.Single : 7

          System.Double : 15

          System.Decimal : 29

すべての型の場合:

  • 結果に表示される桁数 (指数を含まない) は、有効桁数指定子の値を超えなくなります。値は必要に応じて丸められます。
  • 小数点と小数点の後の末尾のゼロは、可能な限り削除されます。
  • 書式指定子 ('G' または 'g' の場合) は、'E' または 'e' が指数指数の前に付くかどうかを決定します。

N

n

数値形式: 次の形式の文字列に使用されます。

          [-]d,ddd,ddd.dd...d

負の値の表現は、 System.Globalization.NumberFormatInfo.NumberNegativePattern プロパティによって決まります。 パターンに負の数の記号 ('-') が含まれている場合、このシンボルは System.Globalization.NumberFormatInfo.NegativeSign プロパティによって提供されます。

少なくとも 0 以外の 10 進数 (d) の前に小数点 ('.') があり、 System.Globalization.NumberFormatInfo.NumberDecimalSeparator プロパティによって提供されます。 小数点と値の最上位桁の間の数字は、 System.Globalization.NumberFormatInfo.NumberGroupSizes プロパティで指定されたグループ サイズを使用してグループ化されます。 グループ区切り記号 (',') は、各桁グループの間に挿入され、 System.Globalization.NumberFormatInfo.NumberGroupSeparator プロパティによって提供されます。

精度指定子は、小数点以下の桁数 (dd...d)。 精度指定子を省略すると、 System.Globalization.NumberFormatInfo.NumberDecimalDigits は文字列内の小数点以下の桁数を決定します。 必要に応じて、結果は最も近い表現可能な値に丸められます。

P

p

パーセント形式: パーセンテージを含む文字列に使用されます。 System.Globalization.NumberFormatInfo.PercentSymbolSystem.Globalization.NumberFormatInfo.PercentGroupSizesSystem.Globalization.NumberFormatInfo.PercentGroupSeparatorSystem.Globalization.NumberFormatInfo.PercentDecimalSeparator、およびSystem.Globalization.NumberFormatInfoメンバーは、それぞれパーセント記号、数字グループのサイズと区切り記号、および小数点を指定します。

System.Globalization.NumberFormatInfo.PercentNegativePatternSystem.Globalization.NumberFormatInfo.PercentPositivePattern 負の値と正の値を表すために使用される記号を決定します。 たとえば、負の値の前にマイナス記号を付けたり、かっこで囲んだりすることができます。

有効桁数が指定されていない場合、結果の小数点以下の桁数は System.Globalization.NumberFormatInfo.PercentDecimalDigitsによって決まります。 必要に応じて、結果は最も近い表現可能な値に丸められます。

結果は 100 でスケーリングされます (.99 は 99% になります)。

R

r

ラウンド トリップ形式: (この形式は、 System.Double または System.Singleで指定した場合にのみ有効です)。浮動小数点値の文字列表現の精度が、文字列を解析しても元の値と比較しても精度が低下しないようにするために使用されます。 データ型の最大有効桁数 ( System.Singleの場合は 7、 System.Doubleの場合は 15) の場合、精度は小数点以下 2 桁増加します。 精度指定子がこの書式指定子と共に指定された場合、それは無視されます。 それ以外の場合、この形式は固定小数点形式と同じです。

X

x

16 進数形式: (この形式は整数データ型で指定されている場合にのみ有効です)。Base 16 の数値の文字列表現に使用されます。有効桁数によって、文字列内の最小桁数が決まります。 有効桁数が数値に含まれている桁数より多く指定されている場合、数値はゼロで左に埋め込まれます。 書式指定子 ('X' または 'x') の大文字と小文字のどちらが 16 進数表現で使用されるかが決まります。

数値がSystem.SingleSystem.Double、またはNaNの値を持つPositiveInfinityまたはNegativeInfinityの場合、書式指定子は無視され、System.Globalization.NumberFormatInfo.NaNSymbolSystem.Globalization.NumberFormatInfo.PositiveInfinitySymbol、またはSystem.Globalization.NumberFormatInfo.NegativeInfinitySymbolのいずれかが返されます。

カスタム書式は、上記の標準書式指定文字列 (Axx) の形式ではない書式として指定された任意の文字列です。 次の表では、カスタム形式の構築に使用される文字について説明します。

書式指定子 説明
0 (ゼロ)

ゼロ プレースホルダー: 書式設定中の値がカスタム形式で '0' が表示される位置に数字がある場合、その数字は出力文字列にコピーされます。それ以外の場合は、出力文字列内のその位置に 0 が格納されます。 小数点区切り記号の前の左端の '0' の位置、および小数点区切り記号の後の右端の '0' の位置によって、出力文字列に常に存在する桁数の範囲が決まります。

小数点区切り記号の後のゼロまたは数字のプレースホルダーの数によって、小数点の後に表示される桁数が決まります。 値は必要に応じて丸められます。

#

Digit placeholder: 書式設定されている値の '#' がカスタム形式で表示される位置に数字がある場合、その数字は出力文字列にコピーされます。それ以外の場合、出力文字列内のその位置には何も格納されません。 この指定子は、'0' が文字列内の唯一の数字である場合でも、有効な数字でない場合は 、'0' 文字を格納しないことに注意してください。 (有効な数字の場合は、出力文字列に '0' 文字が表示されます)。

小数点区切り記号の後のゼロまたは数字のプレースホルダーの数によって、小数点の後に表示される桁数が決まります。 値は必要に応じて丸められます。

. (期間) 小数点区切り記号: 左端の '.' 書式指定文字列内の文字は、書式設定された値の小数点区切り記号の位置を決定します。追加の '.' 文字は無視されます。 System.Globalization.NumberFormatInfo.NumberDecimalSeparator プロパティは、小数点区切り記号として使用される記号を決定します。
, (コンマ)

グループ区切り記号と数値のスケーリング: ',' 文字は 2 つの目的を果たします。 最初に、カスタム形式に 2 つのゼロまたは数字のプレースホルダー (0 または #) の間にこの文字が含まれている場合、小数点区切り記号が存在する場合は、小数点区切り記号の左側に各桁の間にグループ区切り記号が挿入されます。 System.Globalization.NumberFormatInfo.NumberGroupSeparatorプロパティとSystem.Globalization.NumberFormatInfo.NumberGroupSizesプロパティによって、グループ区切り記号として使用される記号と、各グループの桁数がそれぞれ決まります。

書式指定文字列に小数点の左に 1 つ以上の ',' 文字が含まれている場合、数値は拡大縮小されます。 小数点以下桁数は、小数点区切り記号のすぐ左にあるグループ区切り文字の数によって決まります。 x 文字がある場合、値は書式設定される前に 1000X で除算されます。 たとえば、書式指定文字列 '0,' は値を 100 万で除算します。 スケーリングを示す ',' 文字が存在しても、出力文字列にグループ区切り記号は挿入されないことに注意してください。 したがって、数値を 100 万単位でスケーリングし、グループ区切り記号を挿入するには、'#,##0,' のようなカスタム形式を使用します。

% (パーセント) パーセンテージ プレースホルダー: カスタム形式の '%' 文字が存在すると、書式設定される前に数値に 100 が乗算されます。 パーセント記号は、書式指定文字列の '%' が表示される場所の出力文字列に挿入されます。 System.Globalization.NumberFormatInfo.PercentSymbolプロパティは、パーセント記号を決定します。

E0

E+0

E-0

e0

e+0

e-0

エンジニアリング形式: 文字列 'E'、'E+'、'E'、'e'、'e+'、または 'e-' のいずれかがカスタム形式で存在し、その直後に少なくとも 1 つの '0' 文字が続く場合、値は科学的表記を使用して書式設定されます。 指数プレフィックス (E または e) の後に続く '0' 文字の数によって、指数の最小桁数が決まります。 'E+' 形式と 'e+' 形式は、正または負の数値記号が常に指数の前にあることを示します。 'E'、'E'、'e'、または 'e-' 形式は、負の数の記号が負の指数の前にあることを示します。正の指数の前に記号がありません。 正の数値記号は、 System.Globalization.NumberFormatInfo.PositiveSign プロパティによって指定されます。 負の数の記号は、 System.Globalization.NumberFormatInfo.NegativeSign プロパティによって指定されます。
\ (円記号) エスケープ文字: C# などの一部の言語では、円記号文字によって、カスタム形式の次の文字がエスケープ シーケンスとして解釈されます。 これは、'\n' (改行) などの C 言語の書式設定シーケンスで使用されます。 一部の言語では、リテラルとして使用する場合、エスケープ文字自体の前にエスケープ文字を付ける必要があります。 それ以外の場合、コンパイラは文字をエスケープ シーケンスとして解釈します。 このエスケープ文字は、すべてのプログラミング言語でサポートされている必要はありません。

'ABC'

"ABC"

リテラル文字列: 単一引用符または二重引用符で囲まれた文字は、リテラル形式で出力文字列にコピーされ、書式設定には影響しません。
; (セミコロン) セクション区切り記号: ';' 文字は、書式指定文字列内の正、負、およびゼロの数値のセクションを区切るために使用されます。 (この機能については、以下で詳しく説明します)。
その他 その他のすべての文字: 他のすべての文字は、表示される位置のリテラルとして出力文字列に格納されます。

固定小数点書式指定文字列 ('E0'、'E+0'、'E-0'、'e0'、'e+0'、または 'e-0' を含まない文字列) の場合、小数点区切り記号の右側にゼロまたは桁のプレースホルダーがある数の小数点以下に数値が丸められます。 ユーザー設定の書式に小数点が含まれていない場合、数値は最も近い整数に丸められます。 数値の桁数が、小数点の左側にゼロまたは数字のプレースホルダーよりも多い場合、余分な数字は、最初のゼロまたは数字のプレースホルダーの直前の出力文字列にコピーされます。

カスタム書式には、セクション区切り文字で区切られた最大 3 つのセクションを含めることができます。正、負、ゼロの値に異なる書式を指定できます。 セクションは次のように解釈されます。

  • 1 つのセクション: カスタム形式はすべての値 (正、負、ゼロ) に適用されます。 負の値には負の符号が含まれます。

  • 2 つのセクション: 最初のセクションは正の値と 0 に適用され、2 番目のセクションは負の値に適用されます。 書式設定する値が負の値で、2 番目のセクションの書式に従って丸めた後に 0 になる場合、結果の 0 は最初のセクションに従って書式設定されます。 負の値には、負の値の表現を完全に制御するための負の符号は含まれません。 たとえば、負の値は、'####.# のようなカスタム形式を使用してかっこで表すことができます。(####.####)’.

  • 3 つのセクション: 最初のセクションは正の値に適用され、2 番目のセクションは負の値に適用され、3 番目のセクションはゼロに適用されます。 2 番目のセクションは空にすることができます (セミコロンの間には何も表示されません)。この場合、最初のセクションはすべての 0 以外の値に適用され、負の値には負の符号が含まれます。 書式設定する数値が 0 以外で、1 番目または 2 番目のセクションの書式に従って丸めた後に 0 になる場合、結果の 0 は 3 番目のセクションに従って書式設定されます。

System.Enum型とSystem.DateTime型では、書式指定子を使用して値の文字列形式を書式設定することもできます。 特定の書式指定子の意味は、書式設定されるデータの種類 (数値、日付/時刻、列挙) によって異なります。 各型でサポートされている書式指定子の包括的な一覧については、 System.EnumSystem.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

情報テキストの末尾。