Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
string
öğesini sayısal bir türde (Parse
, TryParse
, int
gibi) bulunan long
veya double
yöntemini çağırarak ya da System.Convert sınıfındaki yöntemleri kullanarak bir sayıya dönüştürebilirsiniz.
Bir TryParse
yöntemi (örneğin, int.TryParse("11", out number)
) veya bir Parse
yöntemi (örneğin, var number = int.Parse("11")
) çağırmak biraz daha verimli ve basittir. yöntemi Convert kullanmak, uygulayan IConvertiblegenel nesneler için daha kullanışlıdır.
Beklediğiniz dizenin içerdiği sayısal tür üzerinde Parse
veya TryParse
yöntemlerini kullanırsınız, örneğin System.Int32 türü gibi.
Convert.ToInt32 yöntemi Parse'i dahili olarak kullanır.
Parse
yöntemi dönüştürülen sayıyı döndürür; yöntem, dönüştürmenin TryParse
başarılı olup olmadığını gösteren bir boole değeri döndürür ve bir parametrede out
dönüştürülen sayıyı döndürür. Dize geçerli bir biçimde değilse, Parse
bir özel durum oluşturur, ancak TryParse
döndürür false
. Bir Parse
yöntemini çağırırken, ayrıştırma işlemi başarısız olduğunda bir FormatException yakalamak için her zaman özel durum işlemeyi kullanmanız gerekir.
Tavsiye
Bir dizeyi sayıya dönüştürmek için yapay zeka yardımı kullanabilirsiniz.
Ayrıştırma veya TryParse yöntemlerini çağırma
Parse
ve TryParse
yöntemleri dizenin başındaki ve sonundaki boşlukları yoksayar, ancak diğer tüm karakterler uygun sayısal türü (int
, long
, ulong
, float
, , decimal
vb.) oluşturan karakterler olmalıdır. Dizede sayıyı oluşturan herhangi bir boşluk hataya neden olur. Örneğin, "10", "10.3" veya " 10 " ifadelerini ayrıştırmak için decimal.TryParse
kullanabilirsiniz, ancak "10X", "1 0" (içindeki boşluğa dikkat edin), "10 .3" (içindeki boşluğa dikkat edin), "10e1" (burada float.TryParse
çalışır) gibi ifadelerden 10'u ayrıştırmak için bu yöntemi kullanamazsınız. Değeri null
veya String.Empty olan bir dize başarıyla ayrıştırılamaz. yöntemini çağırarak ayrıştırmaya çalışmadan önce null veya boş bir dize olup String.IsNullOrEmpty olmadığını kontrol edebilirsiniz.
Aşağıdaki örnekte, Parse
ve TryParse
için başarılı ve başarısız çağrılar gösterilmektedir.
using System;
public static class StringConversion
{
public static void Main()
{
string input = String.Empty;
try
{
int result = Int32.Parse(input);
Console.WriteLine(result);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{input}'");
}
// Output: Unable to parse ''
try
{
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: -105
if (Int32.TryParse("-105", out int j))
{
Console.WriteLine(j);
}
else
{
Console.WriteLine("String could not be parsed.");
}
// Output: -105
try
{
int m = Int32.Parse("abc");
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: Input string was not in a correct format.
const string inputString = "abc";
if (Int32.TryParse(inputString, out int numValue))
{
Console.WriteLine(numValue);
}
else
{
Console.WriteLine($"Int32.TryParse could not parse '{inputString}' to an int.");
}
// Output: Int32.TryParse could not parse 'abc' to an int.
}
}
Aşağıdaki örnek, baştaki sayısal karakterleri (onaltılık karakterler dahil) ve sondaki sayısal olmayan karakterleri içermesi beklenen bir dizeyi ayrıştırmaya yönelik bir yaklaşımı gösterir. Bir TryParse yöntemini çağırmadan önce, dizenin başından yeni bir dizeye geçerli karakterler atar. Ayrıştırılacak dizeler birkaç karakter içerdiğinden, örnek yeni bir dizeye geçerli karakterler atamak için yöntemini çağırır String.Concat . Daha büyük bir dize için StringBuilder sınıfı bunun yerine kullanılabilir.
using System;
public static class StringConversion
{
public static void Main()
{
var str = " 10FFxxx";
string numericString = string.Empty;
foreach (var c in str)
{
// Check for numeric characters (hex in this case) or leading or trailing spaces.
if ((c >= '0' && c <= '9') || (char.ToUpperInvariant(c) >= 'A' && char.ToUpperInvariant(c) <= 'F') || c == ' ')
{
numericString = string.Concat(numericString, c.ToString());
}
else
{
break;
}
}
if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {i}");
}
// Output: ' 10FFxxx' --> ' 10FF' --> 4351
str = " -10FFXXX";
numericString = "";
foreach (char c in str)
{
// Check for numeric characters (0-9), a negative sign, or leading or trailing spaces.
if ((c >= '0' && c <= '9') || c == ' ' || c == '-')
{
numericString = string.Concat(numericString, c);
}
else
{
break;
}
}
if (int.TryParse(numericString, out int j))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {j}");
}
// Output: ' -10FFXXX' --> ' -10' --> -10
}
}
Dönüştürme yöntemlerini çağır
Aşağıdaki tabloda, sınıfındaki bir dizeyi Convert sayıya dönüştürmek için kullanabileceğiniz yöntemlerden bazıları listelenir.
Sayısal tür | Metot |
---|---|
decimal |
ToDecimal(String) |
float |
ToSingle(String) |
double |
ToDouble(String) |
short |
ToInt16(String) |
int |
ToInt32(String) |
long |
ToInt64(String) |
ushort |
ToUInt16(String) |
uint |
ToUInt32(String) |
ulong |
ToUInt64(String) |
Aşağıdaki örnek, giriş dizesini Convert.ToInt32(String) int'e dönüştürmek için yöntemini çağırır. Örnek, şu yöntem tarafından oluşturulan en yaygın iki özel durumu yakalar: FormatException ve OverflowException. Sonuçta elde edilen sayı aşılmadan Int32.MaxValueartırılabilirse, örnek sonuda 1 ekler ve çıktıyı görüntüler.
using System;
public class ConvertStringExample1
{
static void Main(string[] args)
{
int numVal = -1;
bool repeat = true;
while (repeat)
{
Console.Write("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive): ");
string? input = Console.ReadLine();
// ToInt32 can throw FormatException or OverflowException.
try
{
numVal = Convert.ToInt32(input);
if (numVal < Int32.MaxValue)
{
Console.WriteLine($"The new value is {++numVal}");
}
else
{
Console.WriteLine("numVal cannot be incremented beyond its current value");
}
}
catch (FormatException)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
Console.Write("Go again? Y/N: ");
string? go = Console.ReadLine();
if (go?.ToUpper() != "Y")
{
repeat = false;
}
}
}
}
// Sample Output:
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 473
// The new value is 474
// Go again? Y/N: y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 2147483647
// numVal cannot be incremented beyond its current value
// Go again? Y/N: y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): -1000
// The new value is -999
// Go again? Y/N: n
Dizeyi sayıya dönüştürmek için yapay zeka kullanma
Dizeyi sayıya dönüştürmek üzere C# kodu oluşturmak için GitHub Copilot gibi yapay zeka araçlarını kullanabilirsiniz. gereksinimlerinize göre bir dize kullanmak için istem özelleştirebilirsiniz.
Aşağıdaki metinde Copilot Sohbeti için örnek bir istem gösterilmektedir:
Show me how to parse a string as a number, but don't throw an exception if the input string doesn't represent a number.
GitHub Copilot yapay zeka ile desteklendiğinden sürprizler ve hatalar mümkündür. Daha fazla bilgi için bkz. Copilot Sıkça Sorulan Sorular.