Convert.ToSByte 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将指定的值转换为 8 位有符号整数。
重载
ToSByte(SByte) |
返回指定的 8 位有符号整数;不执行实际的转换。 |
ToSByte(String, Int32) |
将指定基数的数字的字符串表示形式转换为等效的 8 位有符号整数。 |
ToSByte(String, IFormatProvider) |
使用指定的区域性特定格式设置信息,将数字的指定字符串表示形式转换为等效的 8 位带符号整数。 |
ToSByte(Object, IFormatProvider) |
使用指定的区域性特定格式信息,将指定对象的值转换为 8 位带符号整数。 |
ToSByte(UInt64) |
将指定的 64 位无符号整数的值转换为等效的 8 位有符号整数。 |
ToSByte(UInt32) |
将指定的 32 位无符号整数的值转换为等效的 8 位有符号整数。 |
ToSByte(String) |
将数字的指定字符串表示形式转换为等效的 8 位带符号整数。 |
ToSByte(Single) |
将指定的单精度浮点数的值转换为等效的 8 位带符号整数。 |
ToSByte(Object) |
将指定对象的值转换为 8 位带符号整数。 |
ToSByte(UInt16) |
将指定的 16 位无符号整数的值转换为等效的 8 位有符号整数。 |
ToSByte(Int32) |
将指定的 32 位有符号整数的值转换为等效的 8 位有符号整数。 |
ToSByte(Int64) |
将指定的 64 位有符号整数的值转换为等效的 8 位有符号整数。 |
ToSByte(Byte) |
将指定的 8 位无符号整数的值转换为等效的 8 位有符号整数。 |
ToSByte(Char) |
将指定的 Unicode 字符的值转换为等效的 8 位有符号整数。 |
ToSByte(DateTime) |
调用此方法始终引发 InvalidCastException。 |
ToSByte(Boolean) |
将指定的布尔值转换为等效的 8 位带符号整数。 |
ToSByte(Double) |
将指定的双精度浮点数的值转换为等效的 8 位带符号整数。 |
ToSByte(Int16) |
将指定的 16 位带符号整数的值转换为等效的 8 位带符号整数。 |
ToSByte(Decimal) |
将指定的十进制数的值转换为等效的 8 位带符号整数。 |
ToSByte(SByte)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
返回指定的 8 位有符号整数;不执行实际的转换。
public:
static System::SByte ToSByte(System::SByte value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (sbyte value);
[<System.CLSCompliant(false)>]
static member ToSByte : sbyte -> sbyte
Public Shared Function ToSByte (value As SByte) As SByte
参数
- value
- SByte
要转换的 8 位无符号整数。
返回
不经更改即返回 value
。
- 属性
适用于
ToSByte(String, Int32)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定基数的数字的字符串表示形式转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(System::String ^ value, int fromBase);
[System.CLSCompliant(false)]
public static sbyte ToSByte (string value, int fromBase);
[System.CLSCompliant(false)]
public static sbyte ToSByte (string? value, int fromBase);
[<System.CLSCompliant(false)>]
static member ToSByte : string * int -> sbyte
Public Shared Function ToSByte (value As String, fromBase As Integer) As SByte
参数
- value
- String
包含要转换的数字的字符串。
- fromBase
- Int32
value
中数字的基数,它必须是 2、8、10 或 16。
返回
与 value
中数字等效的 8 位带符号整数,如果 value
为 null
,则为 0(零)。
- 属性
例外
value
为 Empty。
value
包含一个字符,该字符不是由 fromBase
指定的基数中的有效数字。 如果 value
中的第一个字符无效,则该异常消息指示没有要转换的数字;否则,该消息指示 value
包含无效的尾随字符。
示例
以下示例尝试将字符串数组中的元素解释为数值的二进制、八进制和十六进制表示形式,以便将它们转换为无符号字节。
using System;
public class Example
{
public static void Main()
{
int[] baseValues = { 2, 8, 16};
string[] values = { "FF", "81", "03", "11", "8F", "01", "1C", "111",
"123", "18A" };
// Convert to each supported base.
foreach (int baseValue in baseValues)
{
Console.WriteLine("Converting strings in base {0}:", baseValue);
foreach (string value in values)
{
Console.Write(" '{0,-5} --> ", value + "'");
try {
Console.WriteLine(Convert.ToSByte(value, baseValue));
}
catch (FormatException) {
Console.WriteLine("Bad Format");
}
catch (OverflowException) {
Console.WriteLine("Out of Range");
}
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// Converting strings in base 2:
// 'FF' --> Bad Format
// '81' --> Bad Format
// '03' --> Bad Format
// '11' --> 3
// '8F' --> Bad Format
// '01' --> 1
// '1C' --> Bad Format
// '111' --> 7
// '123' --> Bad Format
// '18A' --> Bad Format
//
// Converting strings in base 8:
// 'FF' --> Bad Format
// '81' --> Bad Format
// '03' --> 3
// '11' --> 9
// '8F' --> Bad Format
// '01' --> 1
// '1C' --> Bad Format
// '111' --> 73
// '123' --> 83
// '18A' --> Bad Format
//
// Converting strings in base 16:
// 'FF' --> -1
// '81' --> -127
// '03' --> 3
// '11' --> 17
// '8F' --> -113
// '01' --> 1
// '1C' --> 28
// '111' --> Out of Range
// '123' --> Out of Range
// '18A' --> Out of Range
open System
let baseValues =
[| 2; 8; 16 |]
let values =
[| "FF"; "81"; "03"; "11"; "8F"; "01"; "1C"; "111"; "123"; "18A" |]
// Convert to each supported base.
for baseValue in baseValues do
printfn $"Converting strings in base {baseValue}:"
for value in values do
printf $""" '{value + "'",-5} --> """
try
printfn $"{Convert.ToSByte(value, baseValue)}"
with
| :? FormatException ->
printfn "Bad Format"
| :? OverflowException ->
printfn "Out of Range"
printfn ""
// The example displays the following output:
// Converting strings in base 2:
// 'FF' --> Bad Format
// '81' --> Bad Format
// '03' --> Bad Format
// '11' --> 3
// '8F' --> Bad Format
// '01' --> 1
// '1C' --> Bad Format
// '111' --> 7
// '123' --> Bad Format
// '18A' --> Bad Format
//
// Converting strings in base 8:
// 'FF' --> Bad Format
// '81' --> Bad Format
// '03' --> 3
// '11' --> 9
// '8F' --> Bad Format
// '01' --> 1
// '1C' --> Bad Format
// '111' --> 73
// '123' --> 83
// '18A' --> Bad Format
//
// Converting strings in base 16:
// 'FF' --> -1
// '81' --> -127
// '03' --> 3
// '11' --> 17
// '8F' --> -113
// '01' --> 1
// '1C' --> 28
// '111' --> Out of Range
// '123' --> Out of Range
// '18A' --> Out of Range
Module Example
Public Sub Main()
Dim bases() As Integer = { 2, 8, 16}
Dim values() As String = { "FF", "81", "03", "11", "8F", "01", "1C", _
"111", "123", "18A" }
' Convert to each supported base.
For Each base As Integer In bases
Console.WriteLine("Converting strings in base {0}:", base)
For Each value As String In values
Console.Write(" '{0,-5} --> ", value + "'")
Try
Console.WriteLine(Convert.ToSByte(value, base))
Catch e As FormatException
Console.WriteLine("Bad Format")
Catch e As OverflowException
Console.WriteLine("Out of Range")
End Try
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' Converting strings in base 2:
' 'FF' --> Bad Format
' '81' --> Bad Format
' '03' --> Bad Format
' '11' --> 3
' '8F' --> Bad Format
' '01' --> 1
' '1C' --> Bad Format
' '111' --> 7
' '123' --> Bad Format
' '18A' --> Bad Format
'
' Converting strings in base 8:
' 'FF' --> Bad Format
' '81' --> Bad Format
' '03' --> 3
' '11' --> 9
' '8F' --> Bad Format
' '01' --> 1
' '1C' --> Bad Format
' '111' --> 73
' '123' --> 83
' '18A' --> Bad Format
'
' Converting strings in base 16:
' 'FF' --> -1
' '81' --> -127
' '03' --> 3
' '11' --> 17
' '8F' --> -113
' '01' --> 1
' '1C' --> 28
' '111' --> Out of Range
' '123' --> Out of Range
' '18A' --> Out of Range
注解
如果 fromBase
为 16,则可以在参数指定的 value
数字前面添加“0x”或“0X”。
由于非基数 10 数值表示形式不支持负号,因此 该方法 ToSByte(String, Int32) 假定负数使用二的补补表示形式。 换句话说,方法始终将字节 (位 7) 的高阶位解释为其符号位。 因此,可以编写代码,将数据类型范围 SByte 外的非基数 10 转换为 SByte 值,而不会引发方法异常。 以下示例将 转换为 MaxValue 其十六进制字符串表示形式,然后调用 ToSByte(String, Int32) 方法。 方法显示消息“0xff转换为 -1”,而不是引发异常。
// Create a hexadecimal value out of range of the SByte type.
string value = Convert.ToString(byte.MaxValue, 16);
// Convert it back to a number.
try
{
sbyte number = Convert.ToSByte(value, 16);
Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value);
}
// Create a hexadecimal value out of range of the SByte type.
let value = Convert.ToString(Byte.MaxValue, 16)
// Convert it back to a number.
try
let number = Convert.ToSByte(value, 16)
printfn $"0x{value} converts to {number}."
with :? OverflowException ->
printfn $"Unable to convert '0x{value}' to a signed byte."
' Create a hexadecimal value out of range of the SByte type.
Dim value As String = Convert.ToString(Byte.MaxValue, 16)
' Convert it back to a number.
Try
Dim number As SByte = Convert.ToSByte(value, 16)
Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value)
End Try
在执行二进制运算或数值转换时,开发人员始终有责任验证方法是否使用适当的数值表示形式来解释特定值。 如以下示例所示,在将值转换为其十六进制字符串表示形式时,首先确定值是表示无符号类型还是带符号类型,以确保该方法适当处理溢出。 如果原始值是无符号类型,但转换回有符号字节会产生其符号位处于打开状态的值,则引发异常。
// Create a hexadecimal value out of range of the SByte type.
byte sourceNumber = byte.MaxValue;
bool isSigned = Math.Sign(Convert.ToDouble(sourceNumber.GetType().GetField("MinValue").GetValue(null))) == -1;
string value = Convert.ToString(sourceNumber, 16);
sbyte targetNumber;
try
{
targetNumber = Convert.ToSByte(value, 16);
if (! isSigned && ((targetNumber & 0x80) != 0))
throw new OverflowException();
else
Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value);
}
// Displays the following to the console:
// Unable to convert '0xff' to a signed byte.
// Create a hexadecimal value out of range of the SByte type.
let sourceNumber = Byte.MaxValue
let isSigned = sign (Convert.ToDouble(sourceNumber.GetType().GetField("MinValue").GetValue null)) = -1
let value = Convert.ToString(sourceNumber, 16)
try
let targetNumber = Convert.ToSByte(value, 16)
if not isSigned && targetNumber &&& 0x80y <> 0y then
raise (OverflowException())
else
printfn $"0x{value} converts to {targetNumber}."
with :? OverflowException ->
printfn $"Unable to convert '0x{value}' to a signed byte."
// Displays the following to the console:
// Unable to convert '0xff' to a signed byte.
' Create a negative hexadecimal value out of range of the Long type.
Dim sourceNumber As Byte = Byte.MaxValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As SByte
Try
targetNumber = Convert.ToSByte(value, 16)
If Not isSigned And ((targetNumber And &H80) <> 0) Then
Throw New OverflowException()
Else
Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
End If
Catch e As OverflowException
Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value)
End Try
' Displays the following to the console:
' Unable to convert '0xff' to a signed byte.
适用于
ToSByte(String, IFormatProvider)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
使用指定的区域性特定格式设置信息,将数字的指定字符串表示形式转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(System::String ^ value, IFormatProvider ^ provider);
[System.CLSCompliant(false)]
public static sbyte ToSByte (string value, IFormatProvider provider);
[System.CLSCompliant(false)]
public static sbyte ToSByte (string value, IFormatProvider? provider);
[<System.CLSCompliant(false)>]
static member ToSByte : string * IFormatProvider -> sbyte
Public Shared Function ToSByte (value As String, provider As IFormatProvider) As SByte
参数
- value
- String
包含要转换的数字的字符串。
- provider
- IFormatProvider
一个提供区域性特定的格式设置信息的对象。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
为 null
。
value
不由一个可选符号后跟一系列数字 (0-9) 组成。
value
表示小于 SByte.MinValue 或大于 SByte.MaxValue 的数字。
示例
以下示例使用 IFormatProvider 对象通过 ToSByte
方法转换值的字符串表示形式SByte。
// Example of the Convert::ToSByte( String* ) and
// Convert::ToSByte( String*, IFormatProvider* ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * protoFmt = L"{0,-20}{1,-20}{2}";
// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
String^ exceptionType = ex->GetType()->ToString();
return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}
void ConvertToSByte( String^ numericStr, IFormatProvider^ provider )
{
Object^ defaultValue;
Object^ providerValue;
// Convert numericStr to SByte without a format provider.
try
{
defaultValue = Convert::ToSByte( numericStr );
}
catch ( Exception^ ex )
{
defaultValue = GetExceptionType( ex );
}
// Convert numericStr to SByte with a format provider.
try
{
providerValue = Convert::ToSByte( numericStr, provider );
}
catch ( Exception^ ex )
{
providerValue = GetExceptionType( ex );
}
Console::WriteLine( gcnew String( protoFmt ), numericStr, defaultValue, providerValue );
}
int main()
{
// Create a NumberFormatInfo object and set several of its
// properties that apply to numbers.
NumberFormatInfo^ provider = gcnew NumberFormatInfo;
// These properties affect the conversion.
provider->NegativeSign = "neg ";
provider->PositiveSign = "pos ";
// These properties do not affect the conversion.
// The input string cannot have decimal and group separators.
provider->NumberDecimalSeparator = ".";
provider->NumberNegativePattern = 0;
Console::WriteLine( "This example of\n"
" Convert::ToSByte( String* ) and \n"
" Convert::ToSByte( String*, IFormatProvider* ) "
"\ngenerates the following output. It converts "
"several strings to \nSByte values, using "
"default formatting or a NumberFormatInfo object.\n" );
Console::WriteLine( gcnew String( protoFmt ), "String to convert", "Default/exception", "Provider/exception" );
Console::WriteLine( gcnew String( protoFmt ), "-----------------", "-----------------", "------------------" );
// Convert strings, with and without an IFormatProvider.
ConvertToSByte( "123", provider );
ConvertToSByte( "+123", provider );
ConvertToSByte( "pos 123", provider );
ConvertToSByte( "-123", provider );
ConvertToSByte( "neg 123", provider );
ConvertToSByte( "123.", provider );
ConvertToSByte( "(123)", provider );
ConvertToSByte( "128", provider );
ConvertToSByte( "-129", provider );
}
/*
This example of
Convert::ToSByte( String* ) and
Convert::ToSByte( String*, IFormatProvider* )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.
String to convert Default/exception Provider/exception
----------------- ----------------- ------------------
123 123 123
+123 123 FormatException
pos 123 FormatException 123
-123 -123 FormatException
neg 123 FormatException -123
123. FormatException FormatException
(123) FormatException FormatException
128 OverflowException OverflowException
-129 OverflowException FormatException
*/
// Example of the Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider ) methods.
using System;
using System.Globalization;
class ToSByteProviderDemo
{
static string format = "{0,-20}{1,-20}{2}";
// Get the exception type name; remove the namespace prefix.
static string GetExceptionType( Exception ex )
{
string exceptionType = ex.GetType( ).ToString( );
return exceptionType.Substring(
exceptionType.LastIndexOf( '.' ) + 1 );
}
static void ConvertToSByte( string numericStr,
IFormatProvider provider )
{
object defaultValue;
object providerValue;
// Convert numericStr to SByte without a format provider.
try
{
defaultValue = Convert.ToSByte( numericStr );
}
catch( Exception ex )
{
defaultValue = GetExceptionType( ex );
}
// Convert numericStr to SByte with a format provider.
try
{
providerValue = Convert.ToSByte( numericStr, provider );
}
catch( Exception ex )
{
providerValue = GetExceptionType( ex );
}
Console.WriteLine( format, numericStr,
defaultValue, providerValue );
}
public static void Main( )
{
// Create a NumberFormatInfo object and set several of its
// properties that apply to numbers.
NumberFormatInfo provider = new NumberFormatInfo();
// These properties affect the conversion.
provider.NegativeSign = "neg ";
provider.PositiveSign = "pos ";
// These properties do not affect the conversion.
// The input string cannot have decimal and group separators.
provider.NumberDecimalSeparator = ".";
provider.NumberNegativePattern = 0;
Console.WriteLine("This example of\n" +
" Convert.ToSByte( string ) and \n" +
" Convert.ToSByte( string, IFormatProvider ) " +
"\ngenerates the following output. It converts " +
"several strings to \nSByte values, using " +
"default formatting or a NumberFormatInfo object.\n" );
Console.WriteLine( format, "String to convert",
"Default/exception", "Provider/exception" );
Console.WriteLine( format, "-----------------",
"-----------------", "------------------" );
// Convert strings, with and without an IFormatProvider.
ConvertToSByte( "123", provider );
ConvertToSByte( "+123", provider );
ConvertToSByte( "pos 123", provider );
ConvertToSByte( "-123", provider );
ConvertToSByte( "neg 123", provider );
ConvertToSByte( "123.", provider );
ConvertToSByte( "(123)", provider );
ConvertToSByte( "128", provider );
ConvertToSByte( "-129", provider );
}
}
/*
This example of
Convert.ToSByte( string ) and
Convert.ToSByte( string, IFormatProvider )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.
String to convert Default/exception Provider/exception
----------------- ----------------- ------------------
123 123 123
+123 123 FormatException
pos 123 FormatException 123
-123 -123 FormatException
neg 123 FormatException -123
123. FormatException FormatException
(123) FormatException FormatException
128 OverflowException OverflowException
-129 OverflowException FormatException
*/
// Example of the Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider ) methods.
open System
open System.Globalization
let format obj1 obj2 obj3 = printfn $"{obj1,-20}{obj2,-20}{obj3}"
// Get the exception type name; remove the namespace prefix.
let getExceptionType (ex: exn) =
let exceptionType = ex.GetType() |> string
exceptionType.Substring(exceptionType.LastIndexOf '.' + 1 )
let convertToSByte (numericStr: string) (provider: IFormatProvider) =
// Convert numericStr to SByte without a format provider.
let defaultValue =
try
Convert.ToSByte numericStr
|> string
with ex ->
getExceptionType ex
// Convert numericStr to SByte with a format provider.
let providerValue =
try
Convert.ToSByte(numericStr, provider)
|> string
with ex ->
getExceptionType ex
format numericStr defaultValue providerValue
// Create a NumberFormatInfo object and set several of its
// properties that apply to numbers.
let provider = NumberFormatInfo()
// These properties affect the conversion.
provider.NegativeSign <- "neg "
provider.PositiveSign <- "pos "
// These properties do not affect the conversion.
// The input string cannot have decimal and group separators.
provider.NumberDecimalSeparator <- "."
provider.NumberNegativePattern <- 0
printfn
"""This example of
Convert.ToSByte( string ) and
Convert.ToSByte( string, IFormatProvider )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.
"""
format "String to convert" "Default/exception" "Provider/exception"
format "-----------------" "-----------------" "------------------"
// Convert strings, with and without an IFormatProvider.
convertToSByte "123" provider
convertToSByte "+123" provider
convertToSByte "pos 123" provider
convertToSByte "-123" provider
convertToSByte "neg 123" provider
convertToSByte "123." provider
convertToSByte "(123)" provider
convertToSByte "128" provider
convertToSByte "-129" provider
// This example of
// Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider )
// generates the following output. It converts several strings to
// SByte values, using default formatting or a NumberFormatInfo object.
// String to convert Default/exception Provider/exception
// ----------------- ----------------- ------------------
// 123 123 123
// +123 123 FormatException
// pos 123 FormatException 123
// -123 -123 FormatException
// neg 123 FormatException -123
// 123. FormatException FormatException
// (123) FormatException FormatException
// 128 OverflowException OverflowException
// -129 OverflowException FormatException
' Example of the Convert.ToSByte( String ) and
' Convert.ToSByte( String, IFormatProvider ) methods.
Imports System.Globalization
Module ToSByteProviderDemo
Dim format As String = "{0,-20}{1,-20}{2}"
' Get the exception type name; remove the namespace prefix.
Function GetExceptionType( ex As Exception ) As String
Dim exceptionType As String = ex.GetType( ).ToString( )
Return exceptionType.Substring( _
exceptionType.LastIndexOf( "."c ) + 1 )
End Function
Sub ConvertToSByte( numericStr As String, _
provider As IFormatProvider )
Dim defaultValue As Object
Dim providerValue As Object
' Convert numericStr to SByte without a format provider.
Try
defaultValue = Convert.ToSByte( numericStr )
Catch ex As Exception
defaultValue = GetExceptionType( ex )
End Try
' Convert numericStr to SByte with a format provider.
Try
providerValue = Convert.ToSByte( numericStr, provider )
Catch ex As Exception
providerValue = GetExceptionType( ex )
End Try
Console.WriteLine( format, numericStr, _
defaultValue, providerValue )
End Sub
Sub Main( )
' Create a NumberFormatInfo object and set several of its
' properties that apply to numbers.
Dim provider As NumberFormatInfo = new NumberFormatInfo( )
' These properties affect the conversion.
provider.NegativeSign = "neg "
provider.PositiveSign = "pos "
' These properties do not affect the conversion.
' The input string cannot have decimal and group separators.
provider.NumberDecimalSeparator = "."
provider.NumberNegativePattern = 0
Console.WriteLine( "This example of" & vbCrLf & _
" Convert.ToSByte( String ) and " & vbCrLf & _
" Convert.ToSByte( String, IFormatProvider ) " & _
vbCrLf & "generates the following output. It " & _
"converts several strings to " & vbCrLf & "SByte " & _
"values, using default formatting " & _
"or a NumberFormatInfo object." & vbCrLf )
Console.WriteLine( format, "String to convert", _
"Default/exception", "Provider/exception" )
Console.WriteLine( format, "-----------------", _
"-----------------", "------------------" )
' Convert strings, with and without an IFormatProvider.
ConvertToSByte( "123", provider )
ConvertToSByte( "+123", provider )
ConvertToSByte( "pos 123", provider )
ConvertToSByte( "-123", provider )
ConvertToSByte( "neg 123", provider )
ConvertToSByte( "123.", provider )
ConvertToSByte( "(123)", provider )
ConvertToSByte( "128", provider )
ConvertToSByte( "-129", provider )
End Sub
End Module
' This example of
' Convert.ToSByte( String ) and
' Convert.ToSByte( String, IFormatProvider )
' generates the following output. It converts several strings to
' SByte values, using default formatting or a NumberFormatInfo object.
'
' String to convert Default/exception Provider/exception
' ----------------- ----------------- ------------------
' 123 123 123
' +123 123 FormatException
' pos 123 FormatException 123
' -123 -123 FormatException
' neg 123 FormatException -123
' 123. FormatException FormatException
' (123) FormatException FormatException
' 128 OverflowException OverflowException
' -129 OverflowException FormatException
注解
provider
是获取 IFormatProviderNumberFormatInfo 对象的实例。 对象 NumberFormatInfo 提供有关 格式的 value
区域性特定信息。 如果 provider
为 null
, NumberFormatInfo 则使用当前区域性的 。
如果不想在转换失败时处理异常,可以改为调用 SByte.TryParse 方法。 它返回一个 Boolean 值,该值指示转换是成功还是失败。
另请参阅
适用于
ToSByte(Object, IFormatProvider)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
使用指定的区域性特定格式信息,将指定对象的值转换为 8 位带符号整数。
public:
static System::SByte ToSByte(System::Object ^ value, IFormatProvider ^ provider);
[System.CLSCompliant(false)]
public static sbyte ToSByte (object value, IFormatProvider provider);
[System.CLSCompliant(false)]
public static sbyte ToSByte (object? value, IFormatProvider? provider);
[<System.CLSCompliant(false)>]
static member ToSByte : obj * IFormatProvider -> sbyte
Public Shared Function ToSByte (value As Object, provider As IFormatProvider) As SByte
参数
- value
- Object
一个实现 IConvertible 接口的对象。
- provider
- IFormatProvider
一个提供区域性特定的格式设置信息的对象。
返回
一个与 value
等效的 8 位带符号整数,如果 value
为 null
,则为零。
- 属性
例外
value
的格式不正确。
value
表示小于 SByte.MinValue 或大于 SByte.MaxValue 的数字。
示例
以下示例定义一个 ByteString
类,该类将有符号字节和无符号字节存储为十六进制字符串,以及指示字节符号的字段。
ByteString
类实现 IConvertible 接口。 其 IConvertible.ToSByte 方法调用 Parse(String, IFormatProvider) 方法以执行转换。 如果失败,则会 OverflowException引发 。
using System;
using System.Globalization;
public enum SignBit { Negative=-1, Zero=0, Positive=1 };
public struct ByteString : IConvertible
{
private SignBit signBit;
private string byteString;
public SignBit Sign
{
set { signBit = value; }
get { return signBit; }
}
public string Value
{
set {
if (value.Trim().Length > 2)
throw new ArgumentException("The string representation of a byte cannot have more than two characters.");
else
byteString = value;
}
get { return byteString; }
}
// IConvertible implementations.
public TypeCode GetTypeCode() {
return TypeCode.Object;
}
public bool ToBoolean(IFormatProvider provider)
{
if (signBit == SignBit.Zero)
return false;
else
return true;
}
public byte ToByte(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToSByte(byteString, 16)));
else
return Byte.Parse(byteString, NumberStyles.HexNumber);
}
public char ToChar(IFormatProvider provider)
{
if (signBit == SignBit.Negative) {
throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToSByte(byteString, 16)));
}
else {
byte byteValue = Byte.Parse(this.byteString, NumberStyles.HexNumber);
return Convert.ToChar(byteValue);
}
}
public DateTime ToDateTime(IFormatProvider provider)
{
throw new InvalidCastException("ByteString to DateTime conversion is not supported.");
}
public decimal ToDecimal(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
{
sbyte byteValue = SByte.Parse(byteString, NumberStyles.HexNumber);
return Convert.ToDecimal(byteValue);
}
else
{
byte byteValue = Byte.Parse(byteString, NumberStyles.HexNumber);
return Convert.ToDecimal(byteValue);
}
}
public double ToDouble(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
return Convert.ToDouble(SByte.Parse(byteString, NumberStyles.HexNumber));
else
return Convert.ToDouble(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public short ToInt16(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
return Convert.ToInt16(SByte.Parse(byteString, NumberStyles.HexNumber));
else
return Convert.ToInt16(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public int ToInt32(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
return Convert.ToInt32(SByte.Parse(byteString, NumberStyles.HexNumber));
else
return Convert.ToInt32(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public long ToInt64(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
return Convert.ToInt64(SByte.Parse(byteString, NumberStyles.HexNumber));
else
return Convert.ToInt64(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public sbyte ToSByte(IFormatProvider provider)
{
try {
return SByte.Parse(byteString, NumberStyles.HexNumber);
}
catch (OverflowException e) {
throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
Byte.Parse(byteString, NumberStyles.HexNumber)), e);
}
}
public float ToSingle(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
return Convert.ToSingle(SByte.Parse(byteString, NumberStyles.HexNumber));
else
return Convert.ToSingle(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public string ToString(IFormatProvider provider)
{
return "0x" + this.byteString;
}
public object ToType(Type conversionType, IFormatProvider provider)
{
switch (Type.GetTypeCode(conversionType))
{
case TypeCode.Boolean:
return this.ToBoolean(null);
case TypeCode.Byte:
return this.ToByte(null);
case TypeCode.Char:
return this.ToChar(null);
case TypeCode.DateTime:
return this.ToDateTime(null);
case TypeCode.Decimal:
return this.ToDecimal(null);
case TypeCode.Double:
return this.ToDouble(null);
case TypeCode.Int16:
return this.ToInt16(null);
case TypeCode.Int32:
return this.ToInt32(null);
case TypeCode.Int64:
return this.ToInt64(null);
case TypeCode.Object:
if (typeof(ByteString).Equals(conversionType))
return this;
else
throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name));
case TypeCode.SByte:
return this.ToSByte(null);
case TypeCode.Single:
return this.ToSingle(null);
case TypeCode.String:
return this.ToString(null);
case TypeCode.UInt16:
return this.ToUInt16(null);
case TypeCode.UInt32:
return this.ToUInt32(null);
case TypeCode.UInt64:
return this.ToUInt64(null);
default:
throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
}
}
public UInt16 ToUInt16(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
throw new OverflowException(String.Format("{0} is outside the range of the UInt16 type.",
SByte.Parse(byteString, NumberStyles.HexNumber)));
else
return Convert.ToUInt16(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public UInt32 ToUInt32(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
SByte.Parse(byteString, NumberStyles.HexNumber)));
else
return Convert.ToUInt32(Byte.Parse(byteString, NumberStyles.HexNumber));
}
public UInt64 ToUInt64(IFormatProvider provider)
{
if (signBit == SignBit.Negative)
throw new OverflowException(String.Format("{0} is outside the range of the UInt64 type.",
SByte.Parse(byteString, NumberStyles.HexNumber)));
else
return Convert.ToUInt64(Byte.Parse(byteString, NumberStyles.HexNumber));
}
}
open System
open System.Globalization
type SignBit =
| Negative = -1
| Zero = 0
| Positive = 1
[<Struct>]
type ByteString =
val mutable private byteString: string
val mutable Sign : SignBit
member this.Value
with get () = this.byteString
and set (value: string) =
if value.Trim().Length > 2 then
invalidArg "value" "The string representation of a byte cannot have more than two characters."
this.byteString <- value
// IConvertible implementations.
interface IConvertible with
member _.GetTypeCode() =
TypeCode.Object
member this.ToBoolean(provider: IFormatProvider) =
this.Sign <> SignBit.Zero
member this.ToByte(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
raise (OverflowException $"{Convert.ToSByte(this.byteString, 16)} is out of range of the Byte type.")
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
member this.ToChar(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
raise (OverflowException $"{Convert.ToSByte(this.byteString, 16)} is out of range of the Char type.")
else
let byteValue = Byte.Parse(this.byteString, NumberStyles.HexNumber)
Convert.ToChar byteValue
member _.ToDateTime(provider: IFormatProvider) =
raise (InvalidCastException "ByteString to DateTime conversion is not supported.")
member this.ToDecimal(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
SByte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToDecimal
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToDecimal
member this.ToDouble(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
SByte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToDouble
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToDouble
member this.ToInt16(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
SByte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToInt16
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToInt16
member this.ToInt32(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
SByte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToInt32
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToInt32
member this.ToInt64(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
SByte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToInt64
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToInt64
member this.ToSByte(provider: IFormatProvider) =
try
SByte.Parse(this.byteString, NumberStyles.HexNumber)
with :? OverflowException as e ->
raise (OverflowException($"{Byte.Parse(this.byteString, NumberStyles.HexNumber)} is outside the range of the SByte type.", e) )
member this.ToSingle(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
SByte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToSingle
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToSingle
member this.ToString(provider: IFormatProvider) =
"0x" + this.byteString
member this.ToType(conversionType: Type, provider: IFormatProvider) =
let this = this :> IConvertible
match Type.GetTypeCode conversionType with
| TypeCode.Boolean ->
this.ToBoolean null
| TypeCode.Byte ->
this.ToByte null
| TypeCode.Char ->
this.ToChar null
| TypeCode.DateTime ->
this.ToDateTime null
| TypeCode.Decimal ->
this.ToDecimal null
| TypeCode.Double ->
this.ToDouble null
| TypeCode.Int16 ->
this.ToInt16 null
| TypeCode.Int32 ->
this.ToInt32 null
| TypeCode.Int64 ->
this.ToInt64 null
| TypeCode.Object ->
if typeof<ByteString>.Equals conversionType then
this
else
raise (InvalidCastException $"Conversion to a {conversionType.Name} is not supported.")
| TypeCode.SByte ->
this.ToSByte null
| TypeCode.Single ->
this.ToSingle null
| TypeCode.String ->
this.ToString null
| TypeCode.UInt16 ->
this.ToUInt16 null
| TypeCode.UInt32 ->
this.ToUInt32 null
| TypeCode.UInt64 ->
this.ToUInt64 null
| _ ->
raise (InvalidCastException $"Conversion to {conversionType.Name} is not supported.")
member this.ToUInt16(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
raise (OverflowException $"{SByte.Parse(this.byteString, NumberStyles.HexNumber)} is outside the range of the UInt16 type." )
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToUInt16
member this.ToUInt32(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
raise (OverflowException $"{SByte.Parse(this.byteString, NumberStyles.HexNumber)} is outside the range of the UInt32 type.")
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToUInt32
member this.ToUInt64(provider: IFormatProvider) =
if this.Sign = SignBit.Negative then
raise (OverflowException $"{SByte.Parse(this.byteString, NumberStyles.HexNumber)} is outside the range of the UInt32 type.")
else
Byte.Parse(this.byteString, NumberStyles.HexNumber)
|> Convert.ToUInt64
Imports System.Globalization
Public Enum SignBit As Integer
Positive = 1
Zero = 0
Negative = -1
End Enum
Public Structure ByteString : Implements IConvertible
Private signBit As SignBit
Private byteString As String
Public Property Sign As SignBit
Set
signBit = value
End Set
Get
Return signBit
End Get
End Property
Public Property Value As String
Set
If value.Trim().Length > 2 Then
Throw New ArgumentException("The string representation of a byte cannot have more than two characters.")
Else
byteString = value
End If
End Set
Get
Return byteString
End Get
End Property
' IConvertible implementations.
Public Function GetTypeCode() As TypeCode _
Implements IConvertible.GetTypeCode
Return TypeCode.Object
End Function
Public Function ToBoolean(provider As IFormatProvider) As Boolean _
Implements IConvertible.ToBoolean
If signBit = SignBit.Zero Then
Return False
Else
Return True
End If
End Function
Public Function ToByte(provider As IFormatProvider) As Byte _
Implements IConvertible.ToByte
If signBit = signBit.Negative Then
Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToSByte(byteString, 16)))
Else
Return Byte.Parse(byteString, NumberStyles.HexNumber)
End If
End Function
Public Function ToChar(provider As IFormatProvider) As Char _
Implements IConvertible.ToChar
If signBit = signBit.Negative Then
Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToSByte(byteString, 16)))
Else
Dim byteValue As Byte = Byte.Parse(Me.byteString, NumberStyles.HexNumber)
Return Convert.ToChar(byteValue)
End If
End Function
Public Function ToDateTime(provider As IFormatProvider) As Date _
Implements IConvertible.ToDateTime
Throw New InvalidCastException("ByteString to DateTime conversion is not supported.")
End Function
Public Function ToDecimal(provider As IFormatProvider) As Decimal _
Implements IConvertible.ToDecimal
If signBit = signBit.Negative Then
Dim byteValue As SByte = SByte.Parse(byteString, NumberStyles.HexNumber)
Return Convert.ToDecimal(byteValue)
Else
Dim byteValue As Byte = Byte.Parse(byteString, NumberStyles.HexNumber)
Return Convert.ToDecimal(byteValue)
End If
End Function
Public Function ToDouble(provider As IFormatProvider) As Double _
Implements IConvertible.ToDouble
If signBit = signBit.Negative Then
Return Convert.ToDouble(SByte.Parse(byteString, NumberStyles.HexNumber))
Else
Return Convert.ToDouble(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Function ToInt16(provider As IFormatProvider) As Int16 _
Implements IConvertible.ToInt16
If signBit = signBit.Negative Then
Return Convert.ToInt16(SByte.Parse(byteString, NumberStyles.HexNumber))
Else
Return Convert.ToInt16(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Function ToInt32(provider As IFormatProvider) As Int32 _
Implements IConvertible.ToInt32
If signBit = signBit.Negative Then
Return Convert.ToInt32(SByte.Parse(byteString, NumberStyles.HexNumber))
Else
Return Convert.ToInt32(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Function ToInt64(provider As IFormatProvider) As Int64 _
Implements IConvertible.ToInt64
If signBit = signBit.Negative Then
Return Convert.ToInt64(SByte.Parse(byteString, NumberStyles.HexNumber))
Else
Return Convert.ToInt64(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Function ToSByte(provider As IFormatProvider) As SByte _
Implements IConvertible.ToSByte
Try
Return SByte.Parse(byteString, NumberStyles.HexNumber)
Catch e As OverflowException
Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
Byte.Parse(byteString, NumberStyles.HexNumber)))
End Try
End Function
Public Function ToSingle(provider As IFormatProvider) As Single _
Implements IConvertible.ToSingle
If signBit = signBit.Negative Then
Return Convert.ToSingle(SByte.Parse(byteString, NumberStyles.HexNumber))
Else
Return Convert.ToSingle(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Overloads Function ToString(provider As IFormatProvider) As String _
Implements IConvertible.ToString
Return Me.byteString
End Function
Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
Implements IConvertible.ToType
Select Case Type.GetTypeCode(conversionType)
Case TypeCode.Boolean
Return Me.ToBoolean(Nothing)
Case TypeCode.Byte
Return Me.ToByte(Nothing)
Case TypeCode.Char
Return Me.ToChar(Nothing)
Case TypeCode.DateTime
Return Me.ToDateTime(Nothing)
Case TypeCode.Decimal
Return Me.ToDecimal(Nothing)
Case TypeCode.Double
Return Me.ToDouble(Nothing)
Case TypeCode.Int16
Return Me.ToInt16(Nothing)
Case TypeCode.Int32
Return Me.ToInt32(Nothing)
Case TypeCode.Int64
Return Me.ToInt64(Nothing)
Case TypeCode.Object
If GetType(ByteString).Equals(conversionType) Then
Return Me
Else
Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name))
End If
Case TypeCode.SByte
Return Me.ToSByte(Nothing)
Case TypeCode.Single
Return Me.ToSingle(Nothing)
Case TypeCode.String
Return Me.ToString(Nothing)
Case TypeCode.UInt16
Return Me.ToUInt16(Nothing)
Case TypeCode.UInt32
Return Me.ToUInt32(Nothing)
Case TypeCode.UInt64
Return Me.ToUInt64(Nothing)
Case Else
Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
End Select
End Function
Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
Implements IConvertible.ToUInt16
If signBit = signBit.Negative Then
Throw New OverflowException(String.Format("{0} is outside the range of the UInt16 type.", _
SByte.Parse(byteString, NumberStyles.HexNumber)))
Else
Return Convert.ToUInt16(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
Implements IConvertible.ToUInt32
If signBit = signBit.Negative Then
Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
SByte.Parse(byteString, NumberStyles.HexNumber)))
Else
Return Convert.ToUInt32(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
Implements IConvertible.ToUInt64
If signBit = signBit.Negative Then
Throw New OverflowException(String.Format("{0} is outside the range of the UInt64 type.", _
SByte.Parse(byteString, NumberStyles.HexNumber)))
Else
Return Convert.ToUInt64(Byte.Parse(byteString, NumberStyles.HexNumber))
End If
End Function
End Structure
以下示例演示 了 如何IConvertible.ToSByte通过 Convert.ToSByte(Object, IFormatProvider) 方法调用 类的ByteString
实现。
public class Class1
{
public static void Main()
{
sbyte positiveByte = 120;
sbyte negativeByte = -101;
ByteString positiveString = new ByteString();
positiveString.Sign = (SignBit) Math.Sign(positiveByte);
positiveString.Value = positiveByte.ToString("X2");
ByteString negativeString = new ByteString();
negativeString.Sign = (SignBit) Math.Sign(negativeByte);
negativeString.Value = negativeByte.ToString("X2");
try {
Console.WriteLine("'{0}' converts to {1}.", positiveString.Value, Convert.ToSByte(positiveString));
}
catch (OverflowException) {
Console.WriteLine("0x{0} is outside the range of the Byte type.", positiveString.Value);
}
try {
Console.WriteLine("'{0}' converts to {1}.", negativeString.Value, Convert.ToSByte(negativeString));
}
catch (OverflowException) {
Console.WriteLine("0x{0} is outside the range of the Byte type.", negativeString.Value);
}
}
}
// The example displays the following output:
// '78' converts to 120.
// '9B' converts to -101.
let positiveByte = 120y
let negativeByte = -101y
let mutable positiveString = ByteString()
positiveString.Sign <- sign positiveByte |> enum
positiveString.Value <- positiveByte.ToString "X2"
let mutable negativeString = ByteString()
negativeString.Sign <- sign negativeByte |> enum
negativeString.Value <- negativeByte.ToString "X2"
try
printfn $"'{positiveString.Value}' converts to {Convert.ToSByte positiveString}."
with :? OverflowException ->
printfn $"0x{positiveString.Value} is outside the range of the Byte type."
try
printfn $"'{negativeString.Value}' converts to {Convert.ToSByte negativeString}."
with :? OverflowException ->
printfn $"0x{negativeString.Value} is outside the range of the Byte type."
// The example displays the following output:
// '78' converts to 120.
// '9B' converts to -101.
Module modMain
Public Sub Main()
Dim positiveByte As SByte = 120
Dim negativeByte As SByte = -101
Dim positiveString As New ByteString()
positiveString.Sign = CType(Math.Sign(positiveByte), SignBit)
positiveString.Value = positiveByte.ToString("X2")
Dim negativeString As New ByteString()
negativeString.Sign = CType(Math.Sign(negativeByte), SignBit)
negativeString.Value = negativeByte.ToString("X2")
Try
Console.WriteLine("'{0}' converts to {1}.", positiveString.Value, Convert.ToSByte(positiveString))
Catch e As OverflowException
Console.WriteLine("0x{0} is outside the range of the Byte type.", positiveString.Value)
End Try
Try
Console.WriteLine("'{0}' converts to {1}.", negativeString.Value, Convert.ToSByte(negativeString))
Catch e As OverflowException
Console.WriteLine("0x{0} is outside the range of the Byte type.", negativeString.Value)
End Try
End Sub
End Module
' The example dosplays the following output:
' '78' converts to 120.
' '9B' converts to -101.
注解
provider
使用户能够指定有关 的内容 value
的区域性特定转换信息。 例如,如果 value
是 一个 String 表示数字的 , provider
则可提供有关用于表示该数字的表示法的区域性特定信息。
基类型忽略 provider
;但是,如果 value
是实现 IConvertible 接口的用户定义类型,可以使用 参数。
适用于
ToSByte(UInt64)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 64 位无符号整数的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(System::UInt64 value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (ulong value);
[<System.CLSCompliant(false)>]
static member ToSByte : uint64 -> sbyte
Public Shared Function ToSByte (value As ULong) As SByte
参数
- value
- UInt64
要转换的 64 位无符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将长整数数组中的每个元素转换为带符号字节。
ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
sbyte result;
foreach (ulong number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// Converted the UInt64 value 0 to the SByte value 0.
// Converted the UInt64 value 121 to the SByte value 121.
// The UInt64 value 340 is outside the range of the SByte type.
// The UInt64 value 18446744073709551615 is outside the range of the SByte type.
let numbers =
[| UInt32.MinValue; 121u; 340u; UInt32.MaxValue |]
for number in numbers do
try
let result = Convert.ToSByte number
printfn $"Converted the {number.GetType().Name} value {number} to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"The {number.GetType().Name} value {number} is outside the range of the SByte type."
// The example displays the following output:
// Converted the UInt32 value 0 to the SByte value 0.
// Converted the UInt32 value 121 to the SByte value 121.
// Converted the UInt32 value 340 to the SByte value 340.
// The UInt32 value 4294967295 is outside the range of the SByte type.
Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As SByte
For Each number As ULong In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' Converted the UInt64 value 0 to the SByte value 0.
' Converted the UInt64 value 121 to the SByte value 121.
' The UInt64 value 340 is outside the range of the SByte type.
' The UInt64 value 18446744073709551615 is outside the range of the SByte type.
适用于
ToSByte(UInt32)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 32 位无符号整数的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(System::UInt32 value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (uint value);
[<System.CLSCompliant(false)>]
static member ToSByte : uint32 -> sbyte
Public Shared Function ToSByte (value As UInteger) As SByte
参数
- value
- UInt32
要转换的 32 位无符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将整数数组中的每个元素转换为带符号字节。
uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
sbyte result;
foreach (uint number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// Converted the UInt32 value 0 to the SByte value 0.
// Converted the UInt32 value 121 to the SByte value 121.
// The UInt32 value 340 is outside the range of the SByte type.
// The UInt32 value 4294967295 is outside the range of the SByte type.
let numbers =
[| UInt16.MinValue; 121us; 340us; UInt16.MaxValue |]
for number in numbers do
try
let result = Convert.ToSByte number
printfn $"Converted the {number.GetType().Name} value {number} to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"The {number.GetType().Name} value {number} is outside the range of the SByte type."
// The example displays the following output:
// Converted the UInt16 value 0 to the SByte value 0.
// Converted the UInt16 value 121 to the SByte value 121.
// Converted the UInt16 value 340 to the SByte value 340.
// Converted the UInt16 value 65535 to the SByte value 65535.
Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As SByte
For Each number As UInteger In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' Converted the UInt32 value 0 to the SByte value 0.
' Converted the UInt32 value 121 to the SByte value 121.
' The UInt32 value 340 is outside the range of the SByte type.
' The UInt32 value 4294967295 is outside the range of the SByte type.
适用于
ToSByte(String)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将数字的指定字符串表示形式转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(System::String ^ value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (string value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (string? value);
[<System.CLSCompliant(false)>]
static member ToSByte : string -> sbyte
Public Shared Function ToSByte (value As String) As SByte
参数
- value
- String
包含要转换的数字的字符串。
返回
与 value
中数字等效的 8 位带符号整数,如果值为 null
,则为 0(零)。
- 属性
例外
value
不由一个可选符号后跟一系列数字 (0-9) 组成。
value
表示小于 SByte.MinValue 或大于 SByte.MaxValue 的数字。
示例
以下示例使用默认格式使用 方法转换值的ToSByte
字符串表示形式SByte。
// Example of the Convert::ToSByte( String* ) and
// Convert::ToSByte( String*, IFormatProvider* ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * protoFmt = L"{0,-20}{1,-20}{2}";
// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
String^ exceptionType = ex->GetType()->ToString();
return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}
void ConvertToSByte( String^ numericStr, IFormatProvider^ provider )
{
Object^ defaultValue;
Object^ providerValue;
// Convert numericStr to SByte without a format provider.
try
{
defaultValue = Convert::ToSByte( numericStr );
}
catch ( Exception^ ex )
{
defaultValue = GetExceptionType( ex );
}
// Convert numericStr to SByte with a format provider.
try
{
providerValue = Convert::ToSByte( numericStr, provider );
}
catch ( Exception^ ex )
{
providerValue = GetExceptionType( ex );
}
Console::WriteLine( gcnew String( protoFmt ), numericStr, defaultValue, providerValue );
}
int main()
{
// Create a NumberFormatInfo object and set several of its
// properties that apply to numbers.
NumberFormatInfo^ provider = gcnew NumberFormatInfo;
// These properties affect the conversion.
provider->NegativeSign = "neg ";
provider->PositiveSign = "pos ";
// These properties do not affect the conversion.
// The input string cannot have decimal and group separators.
provider->NumberDecimalSeparator = ".";
provider->NumberNegativePattern = 0;
Console::WriteLine( "This example of\n"
" Convert::ToSByte( String* ) and \n"
" Convert::ToSByte( String*, IFormatProvider* ) "
"\ngenerates the following output. It converts "
"several strings to \nSByte values, using "
"default formatting or a NumberFormatInfo object.\n" );
Console::WriteLine( gcnew String( protoFmt ), "String to convert", "Default/exception", "Provider/exception" );
Console::WriteLine( gcnew String( protoFmt ), "-----------------", "-----------------", "------------------" );
// Convert strings, with and without an IFormatProvider.
ConvertToSByte( "123", provider );
ConvertToSByte( "+123", provider );
ConvertToSByte( "pos 123", provider );
ConvertToSByte( "-123", provider );
ConvertToSByte( "neg 123", provider );
ConvertToSByte( "123.", provider );
ConvertToSByte( "(123)", provider );
ConvertToSByte( "128", provider );
ConvertToSByte( "-129", provider );
}
/*
This example of
Convert::ToSByte( String* ) and
Convert::ToSByte( String*, IFormatProvider* )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.
String to convert Default/exception Provider/exception
----------------- ----------------- ------------------
123 123 123
+123 123 FormatException
pos 123 FormatException 123
-123 -123 FormatException
neg 123 FormatException -123
123. FormatException FormatException
(123) FormatException FormatException
128 OverflowException OverflowException
-129 OverflowException FormatException
*/
// Example of the Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider ) methods.
using System;
using System.Globalization;
class ToSByteProviderDemo
{
static string format = "{0,-20}{1,-20}{2}";
// Get the exception type name; remove the namespace prefix.
static string GetExceptionType( Exception ex )
{
string exceptionType = ex.GetType( ).ToString( );
return exceptionType.Substring(
exceptionType.LastIndexOf( '.' ) + 1 );
}
static void ConvertToSByte( string numericStr,
IFormatProvider provider )
{
object defaultValue;
object providerValue;
// Convert numericStr to SByte without a format provider.
try
{
defaultValue = Convert.ToSByte( numericStr );
}
catch( Exception ex )
{
defaultValue = GetExceptionType( ex );
}
// Convert numericStr to SByte with a format provider.
try
{
providerValue = Convert.ToSByte( numericStr, provider );
}
catch( Exception ex )
{
providerValue = GetExceptionType( ex );
}
Console.WriteLine( format, numericStr,
defaultValue, providerValue );
}
public static void Main( )
{
// Create a NumberFormatInfo object and set several of its
// properties that apply to numbers.
NumberFormatInfo provider = new NumberFormatInfo();
// These properties affect the conversion.
provider.NegativeSign = "neg ";
provider.PositiveSign = "pos ";
// These properties do not affect the conversion.
// The input string cannot have decimal and group separators.
provider.NumberDecimalSeparator = ".";
provider.NumberNegativePattern = 0;
Console.WriteLine("This example of\n" +
" Convert.ToSByte( string ) and \n" +
" Convert.ToSByte( string, IFormatProvider ) " +
"\ngenerates the following output. It converts " +
"several strings to \nSByte values, using " +
"default formatting or a NumberFormatInfo object.\n" );
Console.WriteLine( format, "String to convert",
"Default/exception", "Provider/exception" );
Console.WriteLine( format, "-----------------",
"-----------------", "------------------" );
// Convert strings, with and without an IFormatProvider.
ConvertToSByte( "123", provider );
ConvertToSByte( "+123", provider );
ConvertToSByte( "pos 123", provider );
ConvertToSByte( "-123", provider );
ConvertToSByte( "neg 123", provider );
ConvertToSByte( "123.", provider );
ConvertToSByte( "(123)", provider );
ConvertToSByte( "128", provider );
ConvertToSByte( "-129", provider );
}
}
/*
This example of
Convert.ToSByte( string ) and
Convert.ToSByte( string, IFormatProvider )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.
String to convert Default/exception Provider/exception
----------------- ----------------- ------------------
123 123 123
+123 123 FormatException
pos 123 FormatException 123
-123 -123 FormatException
neg 123 FormatException -123
123. FormatException FormatException
(123) FormatException FormatException
128 OverflowException OverflowException
-129 OverflowException FormatException
*/
// Example of the Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider ) methods.
open System
open System.Globalization
let format obj1 obj2 obj3 = printfn $"{obj1,-20}{obj2,-20}{obj3}"
// Get the exception type name; remove the namespace prefix.
let getExceptionType (ex: exn) =
let exceptionType = ex.GetType() |> string
exceptionType.Substring(exceptionType.LastIndexOf '.' + 1 )
let convertToSByte (numericStr: string) (provider: IFormatProvider) =
// Convert numericStr to SByte without a format provider.
let defaultValue =
try
Convert.ToSByte numericStr
|> string
with ex ->
getExceptionType ex
// Convert numericStr to SByte with a format provider.
let providerValue =
try
Convert.ToSByte(numericStr, provider)
|> string
with ex ->
getExceptionType ex
format numericStr defaultValue providerValue
// Create a NumberFormatInfo object and set several of its
// properties that apply to numbers.
let provider = NumberFormatInfo()
// These properties affect the conversion.
provider.NegativeSign <- "neg "
provider.PositiveSign <- "pos "
// These properties do not affect the conversion.
// The input string cannot have decimal and group separators.
provider.NumberDecimalSeparator <- "."
provider.NumberNegativePattern <- 0
printfn
"""This example of
Convert.ToSByte( string ) and
Convert.ToSByte( string, IFormatProvider )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.
"""
format "String to convert" "Default/exception" "Provider/exception"
format "-----------------" "-----------------" "------------------"
// Convert strings, with and without an IFormatProvider.
convertToSByte "123" provider
convertToSByte "+123" provider
convertToSByte "pos 123" provider
convertToSByte "-123" provider
convertToSByte "neg 123" provider
convertToSByte "123." provider
convertToSByte "(123)" provider
convertToSByte "128" provider
convertToSByte "-129" provider
// This example of
// Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider )
// generates the following output. It converts several strings to
// SByte values, using default formatting or a NumberFormatInfo object.
// String to convert Default/exception Provider/exception
// ----------------- ----------------- ------------------
// 123 123 123
// +123 123 FormatException
// pos 123 FormatException 123
// -123 -123 FormatException
// neg 123 FormatException -123
// 123. FormatException FormatException
// (123) FormatException FormatException
// 128 OverflowException OverflowException
// -129 OverflowException FormatException
' Example of the Convert.ToSByte( String ) and
' Convert.ToSByte( String, IFormatProvider ) methods.
Imports System.Globalization
Module ToSByteProviderDemo
Dim format As String = "{0,-20}{1,-20}{2}"
' Get the exception type name; remove the namespace prefix.
Function GetExceptionType( ex As Exception ) As String
Dim exceptionType As String = ex.GetType( ).ToString( )
Return exceptionType.Substring( _
exceptionType.LastIndexOf( "."c ) + 1 )
End Function
Sub ConvertToSByte( numericStr As String, _
provider As IFormatProvider )
Dim defaultValue As Object
Dim providerValue As Object
' Convert numericStr to SByte without a format provider.
Try
defaultValue = Convert.ToSByte( numericStr )
Catch ex As Exception
defaultValue = GetExceptionType( ex )
End Try
' Convert numericStr to SByte with a format provider.
Try
providerValue = Convert.ToSByte( numericStr, provider )
Catch ex As Exception
providerValue = GetExceptionType( ex )
End Try
Console.WriteLine( format, numericStr, _
defaultValue, providerValue )
End Sub
Sub Main( )
' Create a NumberFormatInfo object and set several of its
' properties that apply to numbers.
Dim provider As NumberFormatInfo = new NumberFormatInfo( )
' These properties affect the conversion.
provider.NegativeSign = "neg "
provider.PositiveSign = "pos "
' These properties do not affect the conversion.
' The input string cannot have decimal and group separators.
provider.NumberDecimalSeparator = "."
provider.NumberNegativePattern = 0
Console.WriteLine( "This example of" & vbCrLf & _
" Convert.ToSByte( String ) and " & vbCrLf & _
" Convert.ToSByte( String, IFormatProvider ) " & _
vbCrLf & "generates the following output. It " & _
"converts several strings to " & vbCrLf & "SByte " & _
"values, using default formatting " & _
"or a NumberFormatInfo object." & vbCrLf )
Console.WriteLine( format, "String to convert", _
"Default/exception", "Provider/exception" )
Console.WriteLine( format, "-----------------", _
"-----------------", "------------------" )
' Convert strings, with and without an IFormatProvider.
ConvertToSByte( "123", provider )
ConvertToSByte( "+123", provider )
ConvertToSByte( "pos 123", provider )
ConvertToSByte( "-123", provider )
ConvertToSByte( "neg 123", provider )
ConvertToSByte( "123.", provider )
ConvertToSByte( "(123)", provider )
ConvertToSByte( "128", provider )
ConvertToSByte( "-129", provider )
End Sub
End Module
' This example of
' Convert.ToSByte( String ) and
' Convert.ToSByte( String, IFormatProvider )
' generates the following output. It converts several strings to
' SByte values, using default formatting or a NumberFormatInfo object.
'
' String to convert Default/exception Provider/exception
' ----------------- ----------------- ------------------
' 123 123 123
' +123 123 FormatException
' pos 123 FormatException 123
' -123 -123 FormatException
' neg 123 FormatException -123
' 123. FormatException FormatException
' (123) FormatException FormatException
' 128 OverflowException OverflowException
' -129 OverflowException FormatException
注解
ToSByte(String)使用 方法等效于将 SByte.Parse(String) 传递给 value
方法。
value
通过使用当前区域性的格式设置约定进行解释。
如果不想在转换失败时处理异常,可以改为调用 SByte.TryParse 方法。 它返回一个 Boolean 值,该值指示转换是成功还是失败。
另请参阅
适用于
ToSByte(Single)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的单精度浮点数的值转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(float value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (float value);
[<System.CLSCompliant(false)>]
static member ToSByte : single -> sbyte
Public Shared Function ToSByte (value As Single) As SByte
参数
- value
- Single
要转换的单精度浮点数。
返回
value
,舍入为最接近的 8 位有符号整数。 如果 value
为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将值数组 Single 中的每个元素转换为带符号字节。
object[] values = { true, -12, 163, 935, 'x', "104", "103.0", "-1",
"1.00e2", "One", 1.00e2};
sbyte result;
foreach (object value in values)
{
try {
result = Convert.ToSByte(value);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
value.GetType().Name, value,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
value.GetType().Name, value);
}
catch (FormatException) {
Console.WriteLine("The {0} value {1} is not in a recognizable format.",
value.GetType().Name, value);
}
catch (InvalidCastException) {
Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.",
value.GetType().Name, value);
}
}
// The example displays the following output:
// Converted the Boolean value true to the SByte value 1.
// Converted the Int32 value -12 to the SByte value -12.
// The Int32 value 163 is outside the range of the SByte type.
// The Int32 value 935 is outside the range of the SByte type.
// Converted the Char value x to the SByte value 120.
// Converted the String value 104 to the SByte value 104.
// The String value 103.0 is not in a recognizable format.
// Converted the String value -1 to the SByte value -1.
// The String value 1.00e2 is not in a recognizable format.
// The String value One is not in a recognizable format.
// Converted the Double value 100 to the SByte value 100.
let values: obj[] =
[| true; -12; 163; 935; 'x'; DateTime(2009, 5, 12)
"104"; "103.0"; "-1"
"1.00e2"; "One"; 1.00e2; 16.3e42 |]
for value in values do
try
let result = Convert.ToSByte value
printfn $"Converted the {value.GetType().Name} value {value} to the {result.GetType().Name} value {result}."
with
| :? OverflowException ->
printfn $"The {value.GetType().Name} value {value} is outside the range of the SByte type."
| :? FormatException ->
printfn $"The {value.GetType().Name} value {value} is not in a recognizable format."
| :? InvalidCastException ->
printfn $"No conversion to an SByte exists for the {value.GetType().Name} value {value}."
// The example displays the following output:
// Converted the Boolean value True to the SByte value 1.
// Converted the Int32 value -12 to the SByte value -12.
// Converted the Int32 value 163 to the SByte value 163.
// Converted the Int32 value 935 to the SByte value 935.
// Converted the Char value x to the SByte value 120.
// No conversion to an SByte exists for the DateTime value 5/12/2009 12:00:00 AM.
// Converted the String value 104 to the SByte value 104.
// The String value 103.0 is not in a recognizable format.
// Converted the String value -1 to the SByte value -1.
// The String value 1.00e2 is not in a recognizable format.
// The String value One is not in a recognizable format.
// Converted the Double value 100 to the SByte value 100.
// The Double value 1.63E+43 is outside the range of the SByte type.
Dim values() As Object = { True, -12, 163, 935, "x"c, "104", "103.0", "-1", _
"1.00e2", "One", 1.00e2}
Dim result As SByte
For Each value As Object In values
Try
result = Convert.ToSByte(value)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
value.GetType().Name, value, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
value.GetType().Name, value)
Catch e As FormatException
Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
value.GetType().Name, value)
Catch e As InvalidCastException
Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.", _
value.GetType().Name, value)
End Try
Next
' The example displays the following output:
' Converted the Boolean value True to the SByte value 1.
' Converted the Int32 value -12 to the SByte value -12.
' The Int32 value 163 is outside the range of the SByte type.
' The Int32 value 935 is outside the range of the SByte type.
' Converted the Char value x to the SByte value 120.
' Converted the String value 104 to the SByte value 104.
' The String value 103.0 is not in a recognizable format.
' Converted the String value -1 to the SByte value -1.
' The String value 1.00e2 is not in a recognizable format.
' The String value One is not in a recognizable format.
' Converted the Double value 100 to the SByte value 100.
另请参阅
适用于
ToSByte(Object)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定对象的值转换为 8 位带符号整数。
public:
static System::SByte ToSByte(System::Object ^ value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (object value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (object? value);
[<System.CLSCompliant(false)>]
static member ToSByte : obj -> sbyte
Public Shared Function ToSByte (value As Object) As SByte
参数
- value
- Object
用于实现 IConvertible 接口的对象,或为 null
。
返回
一个与 value
等效的 8 位带符号整数,如果 value
为 null
,则为零。
- 属性
例外
value
的格式不正确。
value
表示小于 SByte.MinValue 或大于 SByte.MaxValue 的数字。
示例
以下示例尝试将对象数组中的每个元素转换为带符号字节。
object[] values = { true, -12, 163, 935, 'x', "104", "103.0", "-1",
"1.00e2", "One", 1.00e2};
sbyte result;
foreach (object value in values)
{
try {
result = Convert.ToSByte(value);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
value.GetType().Name, value,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
value.GetType().Name, value);
}
catch (FormatException) {
Console.WriteLine("The {0} value {1} is not in a recognizable format.",
value.GetType().Name, value);
}
catch (InvalidCastException) {
Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.",
value.GetType().Name, value);
}
}
// The example displays the following output:
// Converted the Boolean value true to the SByte value 1.
// Converted the Int32 value -12 to the SByte value -12.
// The Int32 value 163 is outside the range of the SByte type.
// The Int32 value 935 is outside the range of the SByte type.
// Converted the Char value x to the SByte value 120.
// Converted the String value 104 to the SByte value 104.
// The String value 103.0 is not in a recognizable format.
// Converted the String value -1 to the SByte value -1.
// The String value 1.00e2 is not in a recognizable format.
// The String value One is not in a recognizable format.
// Converted the Double value 100 to the SByte value 100.
let values: obj[] =
[| true; -12; 163; 935; 'x'; DateTime(2009, 5, 12)
"104"; "103.0"; "-1"
"1.00e2"; "One"; 1.00e2; 16.3e42 |]
for value in values do
try
let result = Convert.ToSByte value
printfn $"Converted the {value.GetType().Name} value {value} to the {result.GetType().Name} value {result}."
with
| :? OverflowException ->
printfn $"The {value.GetType().Name} value {value} is outside the range of the SByte type."
| :? FormatException ->
printfn $"The {value.GetType().Name} value {value} is not in a recognizable format."
| :? InvalidCastException ->
printfn $"No conversion to an SByte exists for the {value.GetType().Name} value {value}."
// The example displays the following output:
// Converted the Boolean value True to the SByte value 1.
// Converted the Int32 value -12 to the SByte value -12.
// Converted the Int32 value 163 to the SByte value 163.
// Converted the Int32 value 935 to the SByte value 935.
// Converted the Char value x to the SByte value 120.
// No conversion to an SByte exists for the DateTime value 5/12/2009 12:00:00 AM.
// Converted the String value 104 to the SByte value 104.
// The String value 103.0 is not in a recognizable format.
// Converted the String value -1 to the SByte value -1.
// The String value 1.00e2 is not in a recognizable format.
// The String value One is not in a recognizable format.
// Converted the Double value 100 to the SByte value 100.
// The Double value 1.63E+43 is outside the range of the SByte type.
Dim values() As Object = { True, -12, 163, 935, "x"c, "104", "103.0", "-1", _
"1.00e2", "One", 1.00e2}
Dim result As SByte
For Each value As Object In values
Try
result = Convert.ToSByte(value)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
value.GetType().Name, value, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
value.GetType().Name, value)
Catch e As FormatException
Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
value.GetType().Name, value)
Catch e As InvalidCastException
Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.", _
value.GetType().Name, value)
End Try
Next
' The example displays the following output:
' Converted the Boolean value True to the SByte value 1.
' Converted the Int32 value -12 to the SByte value -12.
' The Int32 value 163 is outside the range of the SByte type.
' The Int32 value 935 is outside the range of the SByte type.
' Converted the Char value x to the SByte value 120.
' Converted the String value 104 to the SByte value 104.
' The String value 103.0 is not in a recognizable format.
' Converted the String value -1 to the SByte value -1.
' The String value 1.00e2 is not in a recognizable format.
' The String value One is not in a recognizable format.
' Converted the Double value 100 to the SByte value 100.
注解
返回值是调用 IConvertible.ToSByte 基础类型的 value
方法的结果。
适用于
ToSByte(UInt16)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 16 位无符号整数的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(System::UInt16 value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (ushort value);
[<System.CLSCompliant(false)>]
static member ToSByte : uint16 -> sbyte
Public Shared Function ToSByte (value As UShort) As SByte
参数
- value
- UInt16
要转换的 16 位无符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue。
示例
以下示例尝试将无符号 16 位整数数组中的每个元素转换为有符号字节。
ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
sbyte result;
foreach (ushort number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// Converted the UInt16 value 0 to the SByte value 0.
// Converted the UInt16 value 121 to the SByte value 121.
// The UInt16 value 340 is outside the range of the SByte type.
// The UInt16 value 65535 is outside the range of the SByte type.
let values =
[| "One"; "1.34e28"; "-26.87"; "-18"; "-6.00"
" 0"; "137"; "1601.9"; string Int32.MaxValue |]
for value in values do
try
let result = Convert.ToSByte value
printfn $"Converted the {value.GetType().Name} value {value} to the {result.GetType().Name} value {result}."
with
| :? OverflowException ->
printfn $"{value} is outside the range of the SByte type."
| :? FormatException ->
printfn $"The {value.GetType().Name} value '{value}' is not in a recognizable format."
// The example displays the following output:
// The String value 'One' is not in a recognizable format.
// The String value '1.34e28' is not in a recognizable format.
// The String value '-26.87' is not in a recognizable format.
// Converted the String value '-18' to the SByte value -18.
// The String value '-6.00' is not in a recognizable format.
// Converted the String value ' 0' to the SByte value 0.
// Converted the String value '137' to the SByte value 137.
// The String value '1601.9' is not in a recognizable format.
// Converted the String value '2147483647' to the SByte value 2147483647.
Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As SByte
For Each number As UShort In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' Converted the UInt16 value 0 to the SByte value 0.
' Converted the UInt16 value 121 to the SByte value 121.
' The UInt16 value 340 is outside the range of the SByte type.
' The UInt16 value 65535 is outside the range of the SByte type.
适用于
ToSByte(Int32)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 32 位有符号整数的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(int value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (int value);
[<System.CLSCompliant(false)>]
static member ToSByte : int -> sbyte
Public Shared Function ToSByte (value As Integer) As SByte
参数
- value
- Int32
要转换的 32 位带符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将带符号整数数组中的每个元素转换为带符号字节。
int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
sbyte result;
foreach (int number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// The Int32 value -2147483648 is outside the range of the SByte type.
// Converted the Int32 value -1 to the SByte value -1.
// Converted the Int32 value 0 to the SByte value 0.
// Converted the Int32 value 121 to the SByte value 121.
// The Int32 value 340 is outside the range of the SByte type.
// The Int32 value 2147483647 is outside the range of the SByte type.
let numbers =
[| Int32.MinValue; -1; 0; 121; 340; Int32.MaxValue |]
for number in numbers do
try
let result = Convert.ToSByte number
printfn $"Converted the {number.GetType().Name} value {number} to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"The {number.GetType().Name} value {number} is outside the range of the SByte type."
// The example displays the following output:
// The Int32 value -2147483647 is outside the range of the SByte type.
// Converted the Int32 value -1 to the SByte value -1.
// Converted the Int32 value 0 to the SByte value 0.
// Converted the Int32 value 121 to the SByte value 121.
// Converted the Int32 value 340 to the SByte value 340.
// The Int32 value 2147483647 is outside the range of the SByte type.
Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As SByte
For Each number As Integer In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' The Int32 value -2147483648 is outside the range of the SByte type.
' Converted the Int32 value -1 to the SByte value -1.
' Converted the Int32 value 0 to the SByte value 0.
' Converted the Int32 value 121 to the SByte value 121.
' The Int32 value 340 is outside the range of the SByte type.
' The Int32 value 2147483647 is outside the range of the SByte type.
适用于
ToSByte(Int64)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 64 位有符号整数的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(long value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (long value);
[<System.CLSCompliant(false)>]
static member ToSByte : int64 -> sbyte
Public Shared Function ToSByte (value As Long) As SByte
参数
- value
- Int64
要转换的 64 位带符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将长整数数组中的每个元素转换为带符号字节。
long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
sbyte result;
foreach (long number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// The Int64 value -9223372036854775808 is outside the range of the SByte type.
// Converted the Int64 value -1 to the SByte value -1.
// Converted the Int64 value 0 to the SByte value 0.
// Converted the Int64 value 121 to the SByte value 121.
// The Int64 value 340 is outside the range of the SByte type.
// The Int64 value 9223372036854775807 is outside the range of the SByte type.
let numbers =
[| Int64.MinValue; -1L; 0L; 121L; 340L; Int64.MaxValue |]
for number in numbers do
try
let result = Convert.ToSByte number
printfn $"Converted the {number.GetType().Name} value {number} to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"The {number.GetType().Name} value {number} is outside the range of the SByte type."
// The example displays the following output:
// The Int64 value -9223372036854775808 is outside the range of the SByte type.
// Converted the Int64 value -1 to the SByte value -1.
// Converted the Int64 value 0 to the SByte value 0.
// Converted the Int64 value 121 to the SByte value 121.
// Converted the Int64 value 340 to the SByte value 340.
// The Int64 value 9223372036854775807 is outside the range of the SByte type.
Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As SByte
For Each number As Long In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' The Int64 value -9223372036854775808 is outside the range of the SByte type.
' Converted the Int64 value -1 to the SByte value -1.
' Converted the Int64 value 0 to the SByte value 0.
' Converted the Int64 value 121 to the SByte value 121.
' The Int64 value 340 is outside the range of the SByte type.
' The Int64 value 9223372036854775807 is outside the range of the SByte type.
适用于
ToSByte(Byte)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 8 位无符号整数的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(System::Byte value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (byte value);
[<System.CLSCompliant(false)>]
static member ToSByte : byte -> sbyte
Public Shared Function ToSByte (value As Byte) As SByte
参数
- value
- Byte
要转换的 8 位无符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue。
示例
以下示例尝试将字节数组中的每个元素转换为带符号的字节。
byte[] numbers = { Byte.MinValue, 10, 100, Byte.MaxValue };
sbyte result;
foreach (byte number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// Converted the Byte value 0 to the SByte value 0.
// Converted the Byte value 10 to the SByte value 10.
// Converted the Byte value 100 to the SByte value 100.
// The Byte value 255 is outside the range of the SByte type.
let bytes =
[| Byte.MinValue; 14uy; 122uy; Byte.MaxValue |]
for byteValue in bytes do
let result = Convert.ToSByte byteValue
printfn $"Converted the {byteValue.GetType().Name} value {byteValue} to the {result.GetType().Name} value {result}."
// The example displays the following output:
// Converted the Byte value 0 to the SByte value 0.
// Converted the Byte value 14 to the SByte value 14.
// Converted the Byte value 122 to the SByte value 122.
// Converted the Byte value 255 to the SByte value 255.
Dim numbers() As Byte = { Byte.MinValue, 10, 100, Byte.MaxValue }
Dim result As SByte
For Each number As Byte In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' Converted the Byte value 0 to the SByte value 0.
' Converted the Byte value 10 to the SByte value 10.
' Converted the Byte value 100 to the SByte value 100.
' The Byte value 255 is outside the range of the SByte type.
适用于
ToSByte(Char)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 Unicode 字符的值转换为等效的 8 位有符号整数。
public:
static System::SByte ToSByte(char value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (char value);
[<System.CLSCompliant(false)>]
static member ToSByte : char -> sbyte
Public Shared Function ToSByte (value As Char) As SByte
参数
- value
- Char
要转换的 Unicode 字符。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue。
示例
以下示例尝试将值数组 Char 中的每个元素转换为带符号字节。
char[] chars = { 'a', 'z', '\u0007', '\u0200', '\u1023' };
foreach (char ch in chars)
{
try {
sbyte result = Convert.ToSByte(ch);
Console.WriteLine("{0} is converted to {1}.", ch, result);
}
catch (OverflowException) {
Console.WriteLine("Unable to convert u+{0} to a byte.",
Convert.ToInt16(ch).ToString("X4"));
}
}
// The example displays the following output:
// a is converted to 97.
// z is converted to 122.
// is converted to 7.
// Unable to convert u+00C8 to a byte.
// Unable to convert u+03FF to a byte.
let chars =
[| 'a'; 'z'; '\u0007'; '\u03FF'; '\u7FFF'; '\uFFFE' |]
for ch in chars do
try
let result = Convert.ToSByte ch
printfn $"Converted the {ch.GetType().Name} value '{ch}' to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"Unable to convert u+{int ch:X4} to an Int32."
// The example displays the following output:
// Converted the Char value 'a' to the SByte value 97.
// Converted the Char value 'z' to the SByte value 122.
// Converted the Char value '' to the SByte value 7.
// Converted the Char value 'Ͽ' to the SByte value 1023.
// Converted the Char value '翿' to the SByte value 32767.
// Converted the Char value '' to the SByte value 65534.
Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(200), ChrW(1023) }
For Each ch As Char in chars
Try
Dim result As SByte = Convert.ToSByte(ch)
Console.WriteLine("{0} is converted to {1}.", ch, result)
Catch e As OverflowException
Console.WriteLine("Unable to convert u+{0} to a byte.", _
AscW(ch).ToString("X4"))
End Try
Next
' The example displays the following output:
' a is converted to 97.
' z is converted to 122.
' is converted to 7.
' Unable to convert u+00C8 to a byte.
' Unable to convert u+03FF to a byte.
适用于
ToSByte(DateTime)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
调用此方法始终引发 InvalidCastException。
public:
static System::SByte ToSByte(DateTime value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (DateTime value);
[<System.CLSCompliant(false)>]
static member ToSByte : DateTime -> sbyte
Public Shared Function ToSByte (value As DateTime) As SByte
参数
- value
- DateTime
要转换的日期和时间值。
返回
不支持此转换。 不返回任何值。
- 属性
例外
不支持此转换。
适用于
ToSByte(Boolean)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的布尔值转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(bool value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (bool value);
[<System.CLSCompliant(false)>]
static member ToSByte : bool -> sbyte
Public Shared Function ToSByte (value As Boolean) As SByte
参数
- value
- Boolean
要转换的布尔值。
返回
如果 value
为 true
,则为数字 1;否则,为 0。
- 属性
示例
以下示例将布尔值 true
和 false
转换为有符号字节值。
bool falseFlag = false;
bool trueFlag = true;
Console.WriteLine("{0} converts to {1}.", falseFlag,
Convert.ToSByte(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
Convert.ToSByte(trueFlag));
// The example displays the following output:
// false converts to 0.
// true converts to 1.
let falseFlag = false
let trueFlag = true
printfn $"{falseFlag} converts to {Convert.ToSByte falseFlag}."
printfn $"{trueFlag} converts to {Convert.ToSByte trueFlag}."
// The example displays the following output:
// False converts to 0.
// True converts to 1.
Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True
Console.WriteLine("{0} converts to {1}.", falseFlag, _
Convert.ToSByte(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
Convert.ToSByte(trueFlag))
' The example displays the following output:
' False converts to 0.
' True converts to 1.
适用于
ToSByte(Double)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的双精度浮点数的值转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(double value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (double value);
[<System.CLSCompliant(false)>]
static member ToSByte : double -> sbyte
Public Shared Function ToSByte (value As Double) As SByte
参数
- value
- Double
要转换的双精度浮点数。
返回
value
,舍入为最接近的 8 位有符号整数。 如果 value
为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将值数组 Double 中的每个元素转换为带符号字节。
double[] numbers = { Double.MinValue, -129.5, -12.7, 0, 16,
103.6, 255.0, 1.63509e17, Double.MaxValue};
sbyte result;
foreach (double number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// The Double value -1.79769313486232E+308 is outside the range of the SByte type.
// The Double value -129.5 is outside the range of the SByte type.
// Converted the Double value -12.7 to the SByte value -13.
// Converted the Double value 0 to the SByte value 0.
// Converted the Double value 16 to the SByte value 16.
// Converted the Double value 103.6 to the SByte value 104.
// The Double value 255 is outside the range of the SByte type.
// The Double value 1.63509E+17 is outside the range of the SByte type.
// The Double value 1.79769313486232E+308 is outside the range of the SByte type.
let values =
[| Double.MinValue; -1.38e10; -1023.299; -12.98
0; 9.113e-16; 103.919; 17834.191; Double.MaxValue |]
for value in values do
try
let result = Convert.ToSByte value
printfn $"Converted the {value.GetType().Name} value '{value}' to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"{value} is outside the range of the SByte type."
// -1.79769313486232E+308 is outside the range of the SByte type.
// -13800000000 is outside the range of the SByte type.
// Converted the Double value '-1023.299' to the SByte value -1023.
// Converted the Double value '-12.98' to the SByte value -13.
// Converted the Double value '0' to the SByte value 0.
// Converted the Double value '9.113E-16' to the SByte value 0.
// Converted the Double value '103.919' to the SByte value 104.
// Converted the Double value '17834.191' to the SByte value 17834.
// 1.79769313486232E+308 is outside the range of the SByte type.
Dim numbers() As Double = { Double.MinValue, -129.5, -12.7, 0, 16, _
103.6, 255.0, 1.63509e17, Double.MaxValue}
Dim result As SByte
For Each number As Double In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' The Double value -1.79769313486232E+308 is outside the range of the SByte type.
' The Double value -129.5 is outside the range of the SByte type.
' Converted the Double value -12.7 to the SByte value -13.
' Converted the Double value 0 to the SByte value 0.
' Converted the Double value 16 to the SByte value 16.
' Converted the Double value 103.6 to the SByte value 104.
' The Double value 255 is outside the range of the SByte type.
' The Double value 1.63509E+17 is outside the range of the SByte type.
' The Double value 1.79769313486232E+308 is outside the range of the SByte type.
另请参阅
适用于
ToSByte(Int16)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的 16 位带符号整数的值转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(short value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (short value);
[<System.CLSCompliant(false)>]
static member ToSByte : int16 -> sbyte
Public Shared Function ToSByte (value As Short) As SByte
参数
- value
- Int16
要转换的 16 位带符号整数。
返回
一个与 value
等效的 8 位带符号整数。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将带符号 16 位整数数组中的每个元素转换为有符号字节。
short[] numbers = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
sbyte result;
foreach (short number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// The Int16 value -32768 is outside the range of the SByte type.
// Converted the Int16 value -1 to the SByte value -1.
// Converted the Int16 value 0 to the SByte value 0.
// Converted the Int16 value 121 to the SByte value 121.
// The Int16 value 340 is outside the range of the SByte type.
// The Int16 value 32767 is outside the range of the SByte type.
let numbers =
[| Int16.MinValue; -1s; 0s; 121s; 340s; Int16.MaxValue |]
for number in numbers do
let result = Convert.ToSByte number
printfn $"Converted the {number.GetType().Name} value {number} to a {result.GetType().Name} value {result}."
// The example displays the following output:
// Converted the Int16 value -32768 to a Int64 value -32768.
// Converted the Int16 value -1 to a Int64 value -1.
// Converted the Int16 value 0 to a Int64 value 0.
// Converted the Int16 value 121 to a Int64 value 121.
// Converted the Int16 value 340 to a Int64 value 340.
// Converted the Int16 value 32767 to a Int64 value 32767.
Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As SByte
For Each number As Short In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' The Int16 value -32768 is outside the range of the SByte type.
' Converted the Int16 value -1 to the SByte value -1.
' Converted the Int16 value 0 to the SByte value 0.
' Converted the Int16 value 121 to the SByte value 121.
' The Int16 value 340 is outside the range of the SByte type.
' The Int16 value 32767 is outside the range of the SByte type.
适用于
ToSByte(Decimal)
- Source:
- Convert.cs
- Source:
- Convert.cs
- Source:
- Convert.cs
重要
此 API 不符合 CLS。
将指定的十进制数的值转换为等效的 8 位带符号整数。
public:
static System::SByte ToSByte(System::Decimal value);
[System.CLSCompliant(false)]
public static sbyte ToSByte (decimal value);
[<System.CLSCompliant(false)>]
static member ToSByte : decimal -> sbyte
Public Shared Function ToSByte (value As Decimal) As SByte
参数
- value
- Decimal
要转换的十进制数。
返回
value
,舍入为最接近的 8 位有符号整数。 如果 value
为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。
- 属性
例外
value
大于 SByte.MaxValue 或小于 SByte.MinValue。
示例
以下示例尝试将值数组 Decimal 中的每个元素转换为带符号字节。
decimal[] numbers = { Decimal.MinValue, -129.5m, -12.7m, 0m, 16m,
103.6m, 255.0m, Decimal.MaxValue };
sbyte result;
foreach (decimal number in numbers)
{
try {
result = Convert.ToSByte(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// The Decimal value -79228162514264337593543950335 is outside the range of the SByte type.
// The Decimal value -129.5 is outside the range of the SByte type.
// Converted the Decimal value -12.7 to the SByte value -13.
// Converted the Decimal value 0 to the SByte value 0.
// Converted the Decimal value 16 to the SByte value 16.
// Converted the Decimal value 103.6 to the SByte value 104.
// The Decimal value 255 is outside the range of the SByte type.
// The Decimal value 79228162514264337593543950335 is outside the range of the SByte type.
let values =
[| Decimal.MinValue; -1034.23m; -12m; 0m; 147m
199.55m; 9214.16m; Decimal.MaxValue |]
for value in values do
try
let result = Convert.ToSByte value
printfn $"Converted the {value.GetType().Name} value '{value}' to the {result.GetType().Name} value {result}."
with :? OverflowException ->
printfn $"{value} is outside the range of the SByte type."
// The example displays the following output:
// -79228162514264337593543950335 is outside the range of the SByte type.
// Converted the Decimal value '-1034.23' to the SByte value -1034.
// Converted the Decimal value '-12' to the SByte value -12.
// Converted the Decimal value '0' to the SByte value 0.
// Converted the Decimal value '147' to the SByte value 147.
// Converted the Decimal value '199.55' to the SByte value 200.
// Converted the Decimal value '9214.16' to the SByte value 9214.
// 79228162514264337593543950335 is outside the range of the SByte type.
Dim numbers() As Decimal = { Decimal.MinValue, -129.5d, -12.7d, 0d, 16d, _
103.6d, 255.0d, Decimal.MaxValue }
Dim result As SByte
For Each number As Decimal In numbers
Try
result = Convert.ToSByte(number)
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
number.GetType().Name, number, _
result.GetType().Name, result)
Catch e As OverflowException
Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
number.GetType().Name, number)
End Try
Next
' The example displays the following output:
' The Decimal value -79228162514264337593543950335 is outside the range of the SByte type.
' The Decimal value -129.5 is outside the range of the SByte type.
' Converted the Decimal value -12.7 to the SByte value -13.
' Converted the Decimal value 0 to the SByte value 0.
' Converted the Decimal value 16 to the SByte value 16.
' Converted the Decimal value 103.6 to the SByte value 104.
' The Decimal value 255 is outside the range of the SByte type.
' The Decimal value 79228162514264337593543950335 is outside the range of the SByte type.