Anhang C Standardbibliothek
C.1 General
Eine konforme C#-Implementierung muss eine Mindestmenge von Typen mit spezifischer Semantik bereitstellen. Diese Typen und ihre Member werden hier in alphabetischer Reihenfolge nach Namespace und Typ aufgeführt. Eine formale Definition dieser Typen und ihrer Member finden Sie unter ISO/IEC 23271:2012 Common Language Infrastructure (CLI), Partition IV; Base Class Library (BCL), Extended Numerics Library, and Extended Array Library, which are included by reference in this specification.
Dieser Text ist informativ.
Die Standardbibliothek soll die Mindestmenge von Typen und Membern sein, die von einer konformen C#-Implementierung benötigt werden. Daher enthält sie nur die Member, die explizit von der C#-Sprachspezifikation benötigt werden.
Es wird erwartet, dass eine konforme C#-Implementierung eine wesentlich umfangreichere Bibliothek bereitstellen wird, mit der nützliche Programme geschrieben werden können. Beispielsweise kann eine konforme Implementierung diese Bibliothek um
- Hinzufügen von Namespaces.
- Hinzufügen von Typen.
- Hinzufügen von Membern zu Nicht-Schnittstellentypen.
- Hinzufügen von dazwischen liegenden Basisklassen oder Schnittstellen
- Durch Struktur- und Klassentypen werden zusätzliche Schnittstellen implementiert.
- Hinzufügen von Attributen (außer dem
ConditionalAttribute
) zu vorhandenen Typen und Membern.
Ende des informativen Texts.
C.2 Standardbibliothekstypen, die in ISO/IEC 23271 definiert sind
Hinweis: Einige
struct
der folgenden Typen weisen denreadonly
Modifizierer auf. Dieser Modifizierer war nicht verfügbar, als ISO/IEC 23271 veröffentlicht wurde, aber für die Einhaltung der Implementierungen dieser Spezifikation erforderlich ist. Endnote
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-Standardbibliothekstypen, die in ISO/IEC 23271 nicht definiert sind
Die folgenden Typen, einschließlich der aufgeführten Mitglieder, müssen in einer konformen Standardbibliothek definiert werden. (Diese Typen können in einer zukünftigen Ausgabe von ISO/IEC 23271 definiert werden.) Es wird erwartet, dass viele dieser Typen mehr Mitglieder zur Verfügung haben, als aufgeführt sind.
Eine konforme Implementierung kann als Erweiterungsmethoden bereitgestellt Task.GetAwaiter()
werden 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-Formatspezifikationen
Die Bedeutung der Formate, die in interpolierten Zeichenfolgenausdrücken (§12.8.3) verwendet werden, werden in ISO/IEC 23271:2012 definiert. Aus Gründen der Einfachheit wird der folgende Text aus der Beschreibung kopiert System.IFormattable
.
Dieser Text ist informativ.
Ein Format ist eine Zeichenfolge, die das Erscheinungsbild eines Objekts beschreibt, wenn es in eine Zeichenfolge konvertiert wird. Standard- oder benutzerdefinierte Formate können verwendet werden. Ein Standardformat verwendet das Format Axx, wobei A ein einzelnes alphabetisches Zeichen ist, das als Formatbezeichner bezeichnet wird, und xx ist eine ganze Zahl zwischen Null und 99 einschließlich, die als Genauigkeitsbezeichner bezeichnet wird. Der Formatbezeichner steuert den Formatierungstyp, der auf den Wert angewendet wird, der als Zeichenfolge dargestellt wird. Der Genauigkeitsbezeichner steuert ggf. die Anzahl der signifikanten Ziffern oder Dezimalstellen in der Zeichenfolge.
Hinweis: Eine Liste der Standardformatbezeichner finden Sie in der folgenden Tabelle. Beachten Sie, dass ein bestimmter Datentyp, z
System.Int32
. B., einen oder mehrere der Standardformatbezeichner möglicherweise nicht unterstützt. Endnote
Hinweis: Wenn ein Format Symbole enthält, die je nach Kultur variieren, z. B. das Währungssymbol, das in den Formaten "C" und "c" enthalten ist, stellt ein Formatierungsobjekt die tatsächlichen Zeichen bereit, die in der Zeichenfolgendarstellung verwendet werden. Eine Methode kann einen Parameter enthalten, um ein
System.IFormatProvider
Objekt zu übergeben, das ein Formatierungsobjekt bereitstellt, oder die Methode verwendet möglicherweise das Standardformatierungsobjekt, das die Symboldefinitionen für die aktuelle Kultur enthält. Die aktuelle Kultur verwendet in der Regel denselben Satz von Symbolen, die standardmäßig systemweit verwendet werden. In der Basisklassenbibliothek ist das Formatierungsobjekt für vom System bereitgestellte numerische Typen eineSystem.Globalization.NumberFormatInfo
Instanz. BeispielsweiseSystem.DateTime
wird eineSystem.Globalization.DateTimeFormatInfo
verwendet. Endnote
In der folgenden Tabelle werden die Standardformatbezeichner und die zugehörigen Formatierungsobjektmmber beschrieben, die mit numerischen Datentypen in der Basisklassenbibliothek verwendet werden.
Formatbezeichner | Beschreibung |
---|---|
|
Währungsformat: Wird für Zeichenfolgen verwendet, die einen Geldwert enthalten.
Wenn der Genauigkeitsbezeichner nicht angegeben wird, |
|
Dezimalformat: (Dieses Format ist nur gültig, wenn es mit integralen Datentypen angegeben wird.) Wird für Zeichenfolgen verwendet, die ganze Zahlen enthalten. Negative Zahlen werden dem von der Der Genauigkeitsbezeichner bestimmt die Mindestanzahl von Ziffern, die in der Zeichenfolge angezeigt werden. Wenn für die angegebene Genauigkeit mehr Ziffern erforderlich sind, als der Wert enthält, wird die Zeichenfolge mit Nullen links gepolstert. Wenn der Genauigkeitsbezeichner weniger Ziffern als im Wert angibt, wird der Genauigkeitsbezeichner ignoriert. |
|
Scientific (Engineering) Format: Wird für Zeichenfolgen in einer der folgenden Formen verwendet: ...m.dddddE+xxx ...m.dddddddDE-xxx ...m.dddddde+xxx ...m.ddddd e-xxx Das Symbol für negative Zahlen ('-') wird nur angezeigt, wenn der Wert negativ ist und von der Genau eine Nicht-Null-Dezimalziffer (m) steht vor dem Dezimaltrennzeichen ('.'), das von der Der Genauigkeitsbezeichner bestimmt die Anzahl der Dezimalstellen (dddddd) in der Zeichenfolge. Wenn der Genauigkeitsbezeichner ausgelassen wird, werden sechs Dezimalstellen in der Zeichenfolge enthalten. Der Exponent (+/-xxx) besteht aus einem positiven oder negativen Zahlensymbol gefolgt von mindestens drei Ziffern (xxx). Der Exponent ist bei Bedarf mit Nullen links gepolstert. Der Fall des Formatbezeichners ('E' oder 'e') bestimmt den Fall, der für das Exponentenpräfix (E oder e) in der Zeichenfolge verwendet wird. Die Ergebnisse werden bei Bedarf auf den nächsten darstellbaren Wert gerundet. Das Symbol für positive Zahlen wird von der |
|
Festkommaformat: Wird für Zeichenfolgen in der folgenden Form verwendet: ...m.dd... d Mindestens eine Nicht-Null-Dezimalziffer (m) steht vor dem Dezimaltrennzeichen ('.'), das von der Ein negatives Zahlenzeichen ('-') vorangestellt ist nur, wenn der Wert negativ ist. Dieses Symbol wird von der Der Genauigkeitsbezeichner bestimmt die Anzahl der Dezimalstellen (dd... d) in der Zeichenfolge. Wenn der Genauigkeitsbezeichner nicht angegeben wird, |
|
Allgemeines Format: Die Zeichenfolge wird entweder im Festkommaformat ('F' oder 'f') oder im wissenschaftlichen Format ('E' oder 'e') formatiert. Für integrale Typen: Werte werden mit festem Punktformat formatiert, wenn exponenter< Genauigkeitsbezeichner, wobei exponent der Exponent des Werts im wissenschaftlichen Format ist. Für alle anderen Werte wird das wissenschaftliche Format verwendet. Wenn der Genauigkeitsbezeichner ausgelassen wird, wird eine Standardgenauigkeit gleich der Feldbreite verwendet, die zum Anzeigen des Maximalwerts für den Datentyp erforderlich ist, was dazu führt, dass der Wert im Festkommaformat formatiert wird. Die Standardgenauigkeiten für integrale Typen sind wie folgt: Für Single-, Dezimal- und Double-Typen: Werte werden mithilfe des Festkommaformats formatiert, wenn exponent ≥ -4 und exponent< precision specifier, wobei exponent der Exponent des Werts im wissenschaftlichen Format ist. Für alle anderen Werte wird das wissenschaftliche Format verwendet. Die Ergebnisse werden bei Bedarf auf den nächsten darstellbaren Wert gerundet. Wenn der Genauigkeitsbezeichner nicht angegeben wird, werden die folgenden Standardgenauigkeiten verwendet: Für alle Typen:
|
|
Zahlenformat: Wird für Zeichenfolgen in der folgenden Form verwendet: ...d,ddd,ddd.dd... d Die Darstellung negativer Werte wird durch die Mindestens eine Nicht-Null-Dezimalziffer (d) steht vor dem Dezimaltrennzeichen ('.'), das von der Der Genauigkeitsbezeichner bestimmt die Anzahl der Dezimalstellen (dd... d) Wenn der Genauigkeitsbezeichner nicht angegeben wird, |
|
Prozentformat: Wird für Zeichenfolgen verwendet, die einen Prozentsatz enthalten. Die
Wenn keine Genauigkeit angegeben wird, wird die Anzahl der Dezimalstellen im Ergebnis durch Das Ergebnis wird um 100 skaliert (99 wird zu 99%). |
|
Roundtrip-Format: (Dieses Format ist nur gültig, wenn mit System.Double oder System.Single .) Wird verwendet, um sicherzustellen, dass die Genauigkeit der Zeichenfolgendarstellung eines Gleitkommawerts so ist, dass die Analyse der Zeichenfolge nicht zu einem Genauigkeitsverlust im Vergleich zum ursprünglichen Wert führt. Wenn die maximale Genauigkeit des Datentyps (7 für und 15 für System.Single System.Double ) zu einem Genauigkeitsverlust führen würde, wird die Genauigkeit um zwei Dezimalstellen erhöht. Wenn ein Genauigkeitsbezeichner mit diesem Formatbezeichner bereitgestellt wird, wird er ignoriert. Dieses Format ist andernfalls identisch mit dem Festkommaformat. |
|
Hexadezimalformat: (Dieses Format ist nur gültig, wenn es mit integralen Datentypen angegeben wird.) Wird für Zeichenfolgendarstellungen von Zahlen in Base 16 verwendet. Die Genauigkeit bestimmt die Mindestanzahl von Ziffern in der Zeichenfolge. Wenn die Genauigkeit mehr Ziffern angibt, als die Zahl enthält, wird die Zahl mit Nullen aufgefüllt. Die Groß- oder Kleinschreibung des Formatbezeichners ('X' oder 'x') bestimmt, ob Groß- oder Kleinbuchstaben in der Hexadezimaldarstellung verwendet werden. |
Wenn der numerische Wert ein System.Single
oder System.Double
mit einem Wert von NaN
, PositiveInfinity
oder , oder NegativeInfinity
, der Formatbezeichner wird ignoriert, und eine der folgenden wird zurückgegeben: System.Globalization.NumberFormatInfo.NaNSymbol
, System.Globalization.NumberFormatInfo.PositiveInfinitySymbol
, oder System.Globalization.NumberFormatInfo.NegativeInfinitySymbol
.
Ein benutzerdefiniertes Format ist eine beliebige Zeichenfolge, die sich nicht in Form einer oben beschriebenen Standardformatzeichenfolge (Axx) befindet. In der folgenden Tabelle werden die Zeichen beschrieben, die beim Erstellen von benutzerdefinierten Formaten verwendet werden.
Formatbezeichner | Beschreibung |
---|---|
0 (Null) |
Nullplatzhalter: Wenn der formatierte Wert eine Ziffer an der Position aufweist, an der ein "0" im benutzerdefinierten Format angezeigt wird, wird diese Ziffer in die Ausgabezeichenfolge kopiert. Andernfalls wird an dieser Position in der Ausgabezeichenfolge eine Null gespeichert. Die Position der äußerst linken "0" vor dem Dezimaltrennzeichen und dem rechtssten "0" nach dem Dezimaltrennzeichen bestimmen den Bereich der Ziffern, die immer in der Ausgabezeichenfolge vorhanden sind. Die Anzahl der Platzhalter null und/oder ziffern nach dem Dezimaltrennzeichen bestimmt die Anzahl der Ziffern, die nach dem Dezimaltrennzeichen angezeigt werden. Werte werden nach Bedarf gerundet. |
# |
Ziffernplatzhalter: Wenn der formatierte Wert eine Ziffer an der Position aufweist, an der ein "#" im benutzerdefinierten Format angezeigt wird, wird diese Ziffer in die Ausgabezeichenfolge kopiert. Andernfalls wird nichts an dieser Position in der Ausgabezeichenfolge gespeichert. Beachten Sie, dass dieser Bezeichner niemals das Zeichen "0" speichert, wenn es sich nicht um eine signifikante Ziffer handelt, auch wenn "0" die einzige Ziffer in der Zeichenfolge ist. (Es wird das Zeichen "0" in der Ausgabezeichenfolge angezeigt, wenn es sich um eine signifikante Ziffer handelt.) Die Anzahl der Platzhalter null und/oder ziffern nach dem Dezimaltrennzeichen bestimmt die Anzahl der Ziffern, die nach dem Dezimaltrennzeichen angezeigt werden. Werte werden nach Bedarf gerundet. |
. (Zeitraum) |
Dezimaltrennzeichen: Die links am meisten '.'
Zeichen in der Formatzeichenfolge bestimmt die Position des Dezimaltrennzeichens im formatierten Wert; alle zusätzlichen '.' Zeichen werden ignoriert. Die System.Globalization.NumberFormatInfo.NumberDecimalSeparator Eigenschaft bestimmt das Symbol, das als Dezimaltrennzeichen verwendet wird. |
, (Komma) |
Gruppentrennzeichen und Zahlenskalierung: Das Zeichen "," dient zwei Zwecken. Wenn das benutzerdefinierte Format dieses Zeichen zwischen zwei Null- oder Ziffernplatzhaltern (0 oder #) und links neben dem Dezimaltrennzeichen enthält, falls vorhanden, enthält die Ausgabe Gruppentrennzeichen, die zwischen den einzelnen Zifferngruppen links neben dem Dezimaltrennzeichen eingefügt werden. Die Wenn die Formatzeichenfolge ein oder mehrere Zeichen "," unmittelbar links neben dem Dezimaltrennzeichen enthält, wird die Zahl skaliert. Der Skalierungsfaktor wird durch die Anzahl der Gruppentrennzeichen unmittelbar links neben dem Dezimaltrennzeichen bestimmt. Wenn x Zeichen vorhanden sind, wird der Wert durch 1000X geteilt, bevor er formatiert wird. Beispielsweise dividiert die Formatzeichenfolge "0," einen Wert um eine Million. Beachten Sie, dass das Vorhandensein des Zeichens "," zum Angeben der Skalierung keine Gruppentrennzeichen in die Ausgabezeichenfolge einfügt. Um eine Zahl um 1 Million zu skalieren und Gruppentrennzeichen einzufügen, verwenden Sie ein benutzerdefiniertes Format wie "#,##0,". |
% (Prozent) |
Prozentplatzhalter: Das Vorhandensein eines "%"-Zeichens in einem benutzerdefinierten Format bewirkt, dass eine Zahl mit 100 multipliziert wird, bevor sie formatiert wird. Das Prozentsymbol wird in die Ausgabezeichenfolge an der Stelle eingefügt, an der das "%" in der Formatzeichenfolge angezeigt wird. Die System.Globalization.NumberFormatInfo.PercentSymbol Eigenschaft bestimmt das Prozentsymbol. |
|
Engineering-Format: Wenn eine der Zeichenfolgen 'E', 'E+', 'E-', 'e', 'e+' oder 'e-' in einem benutzerdefinierten Format vorhanden ist und unmittelbar mit mindestens einem '0'-Zeichen gefolgt wird, wird der Wert mithilfe der wissenschaftlichen Schreibweise formatiert. Die Anzahl von "0" Zeichen nach dem Exponentenpräfix (E oder e) bestimmt die Mindestanzahl von Ziffern im Exponenten. Die Formate "E+" und "e+" geben an, dass dem Exponenten immer ein Symbol für positive oder negative Zahlen vorangestellt ist. Die Formate "E", "E-", "e" oder "e-" deuten darauf hin, dass ein negatives Zahlensymbol vor negativen Exponenten steht; kein Symbol steht vor positiven Exponenten. Das Symbol für positive Zahlen wird von der System.Globalization.NumberFormatInfo.PositiveSign Eigenschaft angegeben. Das Symbol für negative Zahlen wird von der System.Globalization.NumberFormatInfo.NegativeSign Eigenschaft angegeben. |
\ (umgekehrter Schrägstrich) |
Escapezeichen: In einigen Sprachen, z. B. C#, bewirkt das umgekehrte Schrägstrich, dass das nächste Zeichen im benutzerdefinierten Format als Escapesequenz interpretiert wird. Sie wird mit C-Sprachformatierungssequenzen verwendet, z. B. "\n" (Neue Zeile). In einigen Sprachen muss dem Escapezeichen selbst ein Escapezeichen vorangestellt werden, wenn es als Literal verwendet wird. Andernfalls interpretiert der Compiler das Zeichen als Escapesequenz. Dieses Escapezeichen muss in allen Programmiersprachen nicht unterstützt werden. |
|
Literale Zeichenfolge: Zeichen, die in einfache oder doppelte Anführungszeichen eingeschlossen sind, werden buchstäblich in die Ausgabezeichenfolge kopiert und wirken sich nicht auf die Formatierung aus. |
; (Semikolon) |
Abschnittstrennzeichen: Das Zeichen ";" wird verwendet, um Abschnitte für positive, negative und null Zahlen in der Formatzeichenfolge zu trennen. (Dieses Feature wird unten ausführlich beschrieben.) |
Andere | Alle anderen Zeichen: Alle anderen Zeichen werden in der Ausgabezeichenfolge als Literale an der Position gespeichert, an der sie angezeigt werden. |
Beachten Sie, dass Zahlen für Zeichenfolgen mit festem Punktformat (Zeichenfolgen, die keine "E0", "E+0", "E-0", "e+0" oder "e-0" enthalten, auf so viele Dezimalstellen gerundet werden, wie Null- oder Ziffernplatzhalter rechts neben dem Dezimaltrennzeichen vorhanden sind. Wenn das benutzerdefinierte Format kein Dezimaltrennzeichen enthält, wird die Zahl auf die nächste ganze Zahl gerundet. Wenn die Zahl mehr Ziffern enthält, als Null- oder Ziffernplatzhalter links neben dem Dezimaltrennzeichen vorhanden sind, werden die zusätzlichen Ziffern unmittelbar vor dem ersten Platzhalter Null oder Ziffern in die Ausgabezeichenfolge kopiert.
Ein benutzerdefiniertes Format kann bis zu drei Abschnitte enthalten, die durch Abschnittstrennzeichen getrennt sind, um unterschiedliche Formatierungen für positive, negative und Nullwerte anzugeben. Die Abschnitte werden wie folgt interpretiert:
Ein Abschnitt: Das benutzerdefinierte Format gilt für alle Werte (positiv, negativ und null). Negative Werte enthalten ein negatives Vorzeichen.
Zwei Abschnitte: Der erste Abschnitt gilt für positive Werte und Nullen, und der zweite Abschnitt gilt für negative Werte. Wenn der zu formatierende Wert negativ ist, aber nach dem Runden gemäß dem Format im zweiten Abschnitt null wird, wird die resultierende Null gemäß dem ersten Abschnitt formatiert. Negative Werte enthalten kein negatives Zeichen, um die vollständige Kontrolle über Darstellungen negativer Werte zu ermöglichen. Beispielsweise kann eine Negative in Klammern mit einem benutzerdefinierten Format wie "####.### dargestellt werden; (####.####)’.
Drei Abschnitte: Der erste Abschnitt gilt für positive Werte, der zweite Abschnitt gilt für negative Werte, und der dritte Abschnitt gilt für Nullen. Der zweite Abschnitt kann leer sein (zwischen den Semikolons wird nichts angezeigt), in diesem Fall gilt der erste Abschnitt für alle Nichtzerowerte, und negative Werte enthalten ein negatives Vorzeichen. Wenn die zu formatierende Zahl ungleich Null ist, aber nach dem Runden nach dem Format im ersten oder zweiten Abschnitt null wird, wird die resultierende Null gemäß dem dritten Abschnitt formatiert.
Die System.Enum
Typen System.DateTime
unterstützen auch die Verwendung von Formatbezeichnern zum Formatieren von Zeichenfolgendarstellungen von Werten. Die Bedeutung eines bestimmten Formatbezeichners variiert je nach Art von Daten (numerisch, Datum/Uhrzeit, Aufzählung), die formatiert wird. Eine umfassende Liste der Formatbezeichner, die von jedem Typ unterstützt werden, finden Sie System.Enum
unter.System.Globalization.DateTimeFormatInfo
Abkürzungen des C.5-Bibliothekstyps
Auf die folgenden Bibliothekstypen wird in dieser Spezifikation verwiesen. Die vollständigen Namen dieser Typen, einschließlich des globalen Namespacequalifizierers, sind unten aufgeführt. In dieser Spezifikation werden diese Typen entweder als vollqualifizierter Name angezeigt; ohne Angabe des globalen Namespacequalifizierers; oder als einfacher unqualifizierter Typname, wobei auch der Namespace ausgelassen wird. Beispielsweise bedeutet der Typ ICollection<T>
, wenn er in dieser Spezifikation verwendet wird, immer den Typ 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
Ende des informativen Texts.
ECMA C# draft specification