共用方式為


附錄 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複製。

此文字具有資訊性。

格式是字串,描述物件轉換成字串時的外觀。 您可以使用標準或自訂格式。 標準格式採用 Axx 格式,其中 A 是稱為 格式規範的單一字母字元,而 xx 是介於零到 99 之間的整數,稱為 有效位數規範。 格式規範會控制套用至以字串表示之值的格式設定類型。 有效位數規範會控制字串中有效位數或小數位數的數目,如果適用的話。

注意:如需標準格式規範的清單,請參閱下表。 請注意,指定的數據類型,例如 System.Int32,可能不支援一或多個標準格式規範。 end note

注意:當格式包含因文化特性而異的符號時,例如 『C』 和 『c』 格式所包含的 currencysymbol 時,格式物件會提供字元串表示中使用的實際字元。 方法可能包含參數來傳遞 System.IFormatProvider 提供格式化對象的物件,或者方法可能會使用預設格式化物件,其中包含目前文化特性的符號定義。 根據預設,目前的文化特性通常會使用相同的符號集。 在基類庫中,系統提供數值類型的格式化對像是 System.Globalization.NumberFormatInfo 實例。 System.DateTime例如,System.Globalization.DateTimeFormatInfo會使用 。 end note

下表描述標準格式規範和相關聯的格式化對象成員,這些對象成員會與基類庫中的數值數據類型搭配使用。

格式規範 描述

C

c

貨幣格式: 用於包含貨幣值的字串。 System.Globalization.NumberFormatInfo.CurrencyGroupSizesSystem.Globalization.NumberFormatInfo.CurrencySymbolSystem.Globalization.NumberFormatInfo.CurrencyGroupSeparatorSystem.Globalization.NumberFormatInfo.CurrencyDecimalSeparator 成員System.Globalization.NumberFormatInfo分別提供數位群組的貨幣符號、大小和分隔符,以及小數分隔符。

System.Globalization.NumberFormatInfo.CurrencyNegativePatternSystem.Globalization.NumberFormatInfo.CurrencyPositivePattern 會決定用來表示負值和正值的符號。 例如,負值可以加上減號,或以括弧括住。

如果省略有效位數規範, System.Globalization.NumberFormatInfo.CurrencyDecimalDigits 則決定字串中的小數字數。 如有需要,結果會四捨五入為最接近的可表示值。

D

d

十進位格式: (只有在以整數數據類型指定時,此格式才有效。用於包含整數值的字串。 負數前面會加上 屬性所 System.Globalization.NumberFormatInfo.NegativeSign 指定的負數符號。

有效位數規範會決定出現在字串中的最小位數。 如果指定的有效位數比值包含的數位多,則字串會以零填補。 如果有效位數規範指定的數位小於值中的位數,則會忽略有效位數規範。

E

e

科學 (工程) 格式: 用於下列其中一種形式的字串:

          [-]m.ddddddE+xxx

          [-]m.ddddddE-xxx

          [-]m.dddddde+xxx

          [-]m.dddddde-xxx

只有在值為負數且由 System.Globalization.NumberFormatInfo.NegativeSign 屬性提供時,才會顯示負數符號 ('-')。

只有一個非零的小數字數 (m) 在 屬性提供的 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 十進位分隔符 ('.') 之前。

有效位數規範會決定字串中的小數位數(ddddd)。 如果省略有效位數規範,字串中會包含六個小數字數。

指數 (+/-xxx) 是由正數或負數符號所組成,後面接著至少三位數 (xxx)。 如有必要,指數會以零填補。 格式規範的案例 ('E' 或 'e') 會決定字串中指數前置詞 (E 或 e) 所使用的大小寫。 如有需要,結果會四捨五入為最接近的可表示值。 正數符號是由 System.Globalization.NumberFormatInfo.PositiveSign 屬性提供。

F

f

固定點格式: 用於下列格式的字串:

          [-]m.dd...d

至少一個非零的小數位數 (m) 在屬性所提供的 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 小數分隔符 ('.') 之前。

負數符號符號 ('-') 只有在值為負數時,才會在 m 前面。 這個符號是由 System.Globalization.NumberFormatInfo.NegativeSign 屬性所提供。

有效位數規範會決定小數字數 (dd...字串中的 d。 如果省略有效位數規範, System.Globalization.NumberFormatInfo.NumberDecimalDigits 則決定字串中的小數字數。 如有需要,結果會四捨五入為最接近的可表示值。

G

g

一般格式: 字串的格式為固定點格式 ('F' 或 'f') 或科學格式 ('E' 或 'e')。

針對整數類型:

如果指數<精確度規範是使用固定點格式來格式化值,其中指數是科學格式的值指數。 針對所有其他值,會使用科學格式。

如果省略有效位數規範,則會使用預設有效位數等於顯示數據類型最大值所需的欄位寬度,這會導致以固定點格式格式化值。 整數型別的預設有效位數如下所示:

          System.Int16System.UInt16 : 5

          System.Int32System.UInt32 : 10

          System.Int64System.UInt64 : 19

針對 Single、Decimal 和 Double 類型:

如果指數≥ -4 和指數精確度規範,則會使用固定點格式來格式化值,其中指數<是科學格式的值指數。 針對所有其他值,會使用科學格式。 如有需要,結果會四捨五入為最接近的可表示值。

如果省略有效位數規範,則會使用下列預設有效位數:

          System.Single : 7

          System.Double : 15

          System.Decimal : 29

針對所有類型:

  • 結果中出現的位數(不包括指數)不會超過有效位數規範的值:值會視需要四捨五入。
  • 盡可能移除小數點之後的小數點和任何尾端零。
  • 格式規範的案例 ('G' 或 'g') 會判斷 'E' 或 'e' 是否為科學格式指數的前置詞。

N

n

數位格式: 用於下列格式的字串:

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

負值的表示是由 System.Globalization.NumberFormatInfo.NumberNegativePattern 屬性所決定。 如果模式包含負數符號 ('-'),則此屬性會 System.Globalization.NumberFormatInfo.NegativeSign 提供此符號。

至少一個非零十進位數位 (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.DoubleSystem.Single指定時,此格式才有效。用來確保浮點值之字串表示的精確度,使得剖析字串不會在與原始值相比較時造成精確度遺失。 如果數據類型的最大有效位數 (7 代表 System.Single, 而 15 代表 System.Double) 會導致精確度遺失,則有效位數會增加兩個小數位數。 如果這個格式規範提供有效位數規範,則會忽略它。 這個格式與固定點格式相同。

X

x

十六進位格式: (只有在以整數數據類型指定時,此格式才有效。用於基底 16 中數位的字串表示。有效位數會決定字串中的最小位數。 如果有效位數指定的數位比數位包含的還要多,則數位會以零填補。 格式規範的案例 ('X' 或 'x') 會決定在十六進位表示法中使用大寫或小寫字母。

如果數值是 System.Single 或 ,NaNSystem.Double值為、 PositiveInfinityNegativeInfinity,則會忽略格式規範,並傳回下列其中一項:System.Globalization.NumberFormatInfo.NaNSymbolSystem.Globalization.NumberFormatInfo.PositiveInfinitySymbolSystem.Globalization.NumberFormatInfo.NegativeInfinitySymbol

自定義格式是指定為格式的任何字串,其格式不是上述標準格式字串 (Axx)。 下表描述建構自定義格式時所使用的字元。

格式規範 描述
0 (零)

零佔位元: 如果格式化的值在 『0』 出現在自定義格式的位置中有數位,則該數字會複製到輸出字串;否則零會儲存在輸出字串中的該位置。 小數分隔符前最左邊 『0』 的位置,以及小數分隔符後面的最右邊 『0』 的位置,會決定輸出字串中一律存在的數字範圍。

小數分隔符後面的零和/或數位佔位元元數目會決定小數分隔符之後出現的位數。 值會視需要四捨五入。

#

數位佔位元: 如果格式化的值在 『#』 出現在自定義格式的位置中有數位,則該數位會複製到輸出字串;否則,輸出字串中不會儲存任何專案。 請注意,即使 '0' 是字串中唯一的位數,此規範絕不會儲存 '0' 字元。 (如果輸出字串為有效位數,則會顯示輸出字串中的 『0』 字元。

小數分隔符後面的零和/或數位佔位元元數目會決定小數分隔符之後出現的位數。 值會視需要四捨五入。

. (期間) 小數分隔符: 最左邊的 '.' 格式字串中的字元會決定格式化值中小數分隔符的位置;任何其他 '.' 會忽略字元。 屬性 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 會決定用來做為小數分隔符的符號。
, (逗號)

群組分隔符和數字縮放: ',' 字元有兩個用途。 首先,如果自定義格式包含兩個零或數位佔位元 (0 或 #) 和小數分隔符左邊的這個字元,則輸出會在小數分隔符左邊的每個數位群組之間插入群組分隔符。 System.Globalization.NumberFormatInfo.NumberGroupSeparatorSystem.Globalization.NumberFormatInfo.NumberGroupSizes 屬性會分別決定用來做為群組分隔符的符號,以及每個群組中的位數。

如果格式字串包含一或多個 ',字元會緊接在小數分隔符左邊,則會縮放數位。 縮放比例取決於小數分隔符左邊的群組分隔符數目。 如果有 x 個字元,則值在格式化之前會除以 1000X 。 例如,格式字串 '0,' 會將值除以 1 百萬。 請注意,表示縮放比例的 ',' 字元不會在輸出字串中插入群組分隔符。 因此,若要將數字調整為1百萬,並插入群組分隔符,請使用類似於 '#,##0,,' 的自定義格式。

% (百分比) 百分比佔位元: 自定義格式中 『%』 字元的存在會導致數位在格式化之前乘以 100。 百分比符號會插入輸出字串中,位於格式字串中出現 『%』 的位置。 屬性 System.Globalization.NumberFormatInfo.PercentSymbol 會決定百分比符號。

E0

E+0

E-0

e0

e+0

e-0

工程格式: 如果任何字串 'E'、'E+'、'E-'、'e'、'e+' 或 'e-' 都以自定義格式存在,且緊接著至少一個 '0' 字元,則值會使用科學表示法來格式化。 指數前置詞之後的 『0』 字元數 (E 或 e) 會決定指數中的最小位數。 'E+' 和 'e+' 格式表示正數或負數符號一律在指數之前。 'E'、'E-'、'e'或 'e-' 格式表示負數符號在負指數之前;沒有符號在正指數之前。 正數符號是由 System.Globalization.NumberFormatInfo.PositiveSign 屬性提供。 負數符號是由 System.Globalization.NumberFormatInfo.NegativeSign 屬性提供。
\ (反斜杠) 逸出字元: 在某些語言中,例如 C#,反斜杠字元會導致自定義格式的下一個字元解譯為逸出序列。 它與 C 語言格式序列搭配使用,例如 『\n' (換行符)。 在某些語言中,逸出字元本身在做為常值時,必須前面加上逸出字元。 否則,編譯程式會將字元解譯為逸出序列。 所有程式設計語言都不需要支援這個逸出字元。

'ABC'

"ABC"

常值字串: 以單引號或雙引號括住的字元會以字面方式複製到輸出字串,而且不會影響格式設定。
; (分號) 區段分隔符: ';' 字元是用來分隔格式字串中正數、負數和零數位的區段。 (此功能如下所述。
其他 所有其他字元: 所有其他字元都會以常值的形式儲存在輸出字串中,以常值的形式儲存在它們出現的位置。

請注意,對於固定點格式字串(不包含 'E0'、'E+0'、'E-0'、'e0'、'e+0' 或 'e-0' 的字符串,數位會四捨五入為小數位數佔位符,如小數分隔符右邊有零或數位佔位符。 如果自定義格式不包含小數分隔符,數位會四捨五入為最接近的整數。 如果數位的位數比小數分隔符左邊的零或數位佔位元多,則額外的數位會緊接在前一個零或數位佔位元之前複製到輸出字串。

自定義格式最多可以包含三個區段,並以區段分隔符分隔,以針對正值、負值和零值指定不同的格式。 這些區段會解譯如下:

  • 一個區段:自定義格式適用於所有值(正值、負值和零)。 負值包括負號。

  • 兩個區段:第一個區段適用於正值和零,而第二個區段則適用於負值。 如果要格式化的值是負數,但在根據第二個區段中的格式四捨五入后變成零,則產生的零會根據第一個區段進行格式化。 負值不包含負號,以允許完全控制負值表示法。 例如,負數可以使用類似於 『##### 的自定義格式,以括號表示;(####.####)’.

  • 三個區段:第一個區段適用於正值,第二個區段適用於負值,而第三個區段則套用至零。 第二個區段可以是空的(分號之間不會顯示任何專案),在此情況下,第一個區段會套用至所有非零值,而負值則包含負號。 如果要格式化的數位為非零值,但在根據第一或第二個區段中的格式四捨五入后變成零,則產生的零會根據第三個區段來格式化。

System.EnumSystem.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

信息文字結尾。