附錄 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
下表描述標準格式規範和相關聯的格式化對象成員,這些對象成員會與基類庫中的數值數據類型搭配使用。
格式規範 | 描述 |
---|---|
|
貨幣格式: 用於包含貨幣值的字串。
如果省略有效位數規範, |
|
十進位格式: (只有在以整數數據類型指定時,此格式才有效。用於包含整數值的字串。 負數前面會加上 屬性所 有效位數規範會決定出現在字串中的最小位數。 如果指定的有效位數比值包含的數位多,則字串會以零填補。 如果有效位數規範指定的數位小於值中的位數,則會忽略有效位數規範。 |
|
科學 (工程) 格式: 用於下列其中一種形式的字串: [-]m.ddddddE+xxx [-]m.ddddddE-xxx [-]m.dddddde+xxx [-]m.dddddde-xxx 只有在值為負數且由 只有一個非零的小數字數 (m) 在 屬性提供的 有效位數規範會決定字串中的小數位數(ddddd)。 如果省略有效位數規範,字串中會包含六個小數字數。 指數 (+/-xxx) 是由正數或負數符號所組成,後面接著至少三位數 (xxx)。 如有必要,指數會以零填補。 格式規範的案例 ('E' 或 'e') 會決定字串中指數前置詞 (E 或 e) 所使用的大小寫。 如有需要,結果會四捨五入為最接近的可表示值。 正數符號是由 |
|
固定點格式: 用於下列格式的字串: [-]m.dd...d 至少一個非零的小數位數 (m) 在屬性所提供的 負數符號符號 ('-') 只有在值為負數時,才會在 m 前面。 這個符號是由 有效位數規範會決定小數字數 (dd...字串中的 d。 如果省略有效位數規範, |
|
一般格式: 字串的格式為固定點格式 ('F' 或 'f') 或科學格式 ('E' 或 'e')。 針對整數類型: 如果指數<精確度規範是使用固定點格式來格式化值,其中指數是科學格式的值指數。 針對所有其他值,會使用科學格式。 如果省略有效位數規範,則會使用預設有效位數等於顯示數據類型最大值所需的欄位寬度,這會導致以固定點格式格式化值。 整數型別的預設有效位數如下所示: 針對 Single、Decimal 和 Double 類型: 如果指數≥ -4 和指數精確度規範,則會使用固定點格式來格式化值,其中指數<是科學格式的值指數。 針對所有其他值,會使用科學格式。 如有需要,結果會四捨五入為最接近的可表示值。 如果省略有效位數規範,則會使用下列預設有效位數: 針對所有類型:
|
|
數位格式: 用於下列格式的字串: [-]d,ddd,d.dd...d 負值的表示是由 至少一個非零十進位數位 (d) 在 屬性提供的 有效位數規範會決定小數字數 (dd...d)。 如果省略有效位數規範, |
|
百分比格式: 用於包含百分比的字串。 、
如果未指定有效位數,則結果中的小數位數是由 結果會調整為 100(.99 會變成 99%)。 |
|
來回行程格式: (只有在使用 System.Double 或 System.Single 指定時,此格式才有效。用來確保浮點值之字串表示的精確度,使得剖析字串不會在與原始值相比較時造成精確度遺失。 如果數據類型的最大有效位數 (7 代表 System.Single , 而 15 代表 System.Double ) 會導致精確度遺失,則有效位數會增加兩個小數位數。 如果這個格式規範提供有效位數規範,則會忽略它。 這個格式與固定點格式相同。 |
|
十六進位格式: (只有在以整數數據類型指定時,此格式才有效。用於基底 16 中數位的字串表示。有效位數會決定字串中的最小位數。 如果有效位數指定的數位比數位包含的還要多,則數位會以零填補。 格式規範的案例 ('X' 或 'x') 會決定在十六進位表示法中使用大寫或小寫字母。 |
如果數值是 System.Single
或 ,NaN
且System.Double
值為、 PositiveInfinity
或 NegativeInfinity
,則會忽略格式規範,並傳回下列其中一項:System.Globalization.NumberFormatInfo.NaNSymbol
、 System.Globalization.NumberFormatInfo.PositiveInfinitySymbol
或 System.Globalization.NumberFormatInfo.NegativeInfinitySymbol
。
自定義格式是指定為格式的任何字串,其格式不是上述標準格式字串 (Axx)。 下表描述建構自定義格式時所使用的字元。
格式規範 | 描述 |
---|---|
0 (零) |
零佔位元: 如果格式化的值在 『0』 出現在自定義格式的位置中有數位,則該數字會複製到輸出字串;否則零會儲存在輸出字串中的該位置。 小數分隔符前最左邊 『0』 的位置,以及小數分隔符後面的最右邊 『0』 的位置,會決定輸出字串中一律存在的數字範圍。 小數分隔符後面的零和/或數位佔位元元數目會決定小數分隔符之後出現的位數。 值會視需要四捨五入。 |
# |
數位佔位元: 如果格式化的值在 『#』 出現在自定義格式的位置中有數位,則該數位會複製到輸出字串;否則,輸出字串中不會儲存任何專案。 請注意,即使 '0' 是字串中唯一的位數,此規範絕不會儲存 '0' 字元。 (如果輸出字串為有效位數,則會顯示輸出字串中的 『0』 字元。 小數分隔符後面的零和/或數位佔位元元數目會決定小數分隔符之後出現的位數。 值會視需要四捨五入。 |
. (期間) |
小數分隔符: 最左邊的 '.'
格式字串中的字元會決定格式化值中小數分隔符的位置;任何其他 '.' 會忽略字元。 屬性 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 會決定用來做為小數分隔符的符號。 |
, (逗號) |
群組分隔符和數字縮放: ',' 字元有兩個用途。 首先,如果自定義格式包含兩個零或數位佔位元 (0 或 #) 和小數分隔符左邊的這個字元,則輸出會在小數分隔符左邊的每個數位群組之間插入群組分隔符。 如果格式字串包含一或多個 ',字元會緊接在小數分隔符左邊,則會縮放數位。 縮放比例取決於小數分隔符左邊的群組分隔符數目。 如果有 x 個字元,則值在格式化之前會除以 1000X 。 例如,格式字串 '0,' 會將值除以 1 百萬。 請注意,表示縮放比例的 ',' 字元不會在輸出字串中插入群組分隔符。 因此,若要將數字調整為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 屬性提供。 |
\ (反斜杠) |
逸出字元: 在某些語言中,例如 C#,反斜杠字元會導致自定義格式的下一個字元解譯為逸出序列。 它與 C 語言格式序列搭配使用,例如 『\n' (換行符)。 在某些語言中,逸出字元本身在做為常值時,必須前面加上逸出字元。 否則,編譯程式會將字元解譯為逸出序列。 所有程式設計語言都不需要支援這個逸出字元。 |
|
常值字串: 以單引號或雙引號括住的字元會以字面方式複製到輸出字串,而且不會影響格式設定。 |
; (分號) |
區段分隔符: ';' 字元是用來分隔格式字串中正數、負數和零數位的區段。 (此功能如下所述。 |
其他 | 所有其他字元: 所有其他字元都會以常值的形式儲存在輸出字串中,以常值的形式儲存在它們出現的位置。 |
請注意,對於固定點格式字串(不包含 'E0'、'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
信息文字結尾。