我正在尝试编写一个函数,将string
“12345”的内容转换为int
。
如果字符串为空白,我想返回null
(未初始化),而不是值0
。
问题是,函数不返回未初始化的值。
我的代码无法编译,因为Retval可以返回未初始化的值......
到目前为止我的尝试:
public int ConvertStringToNumber(String TheString)
{
// Uninitialized
int Retval;
if (TheString.Length > 0)
{
// We have a valid string
if (Int32.TryParse(TheString, out Retval))
{
// We have a valid Number
}
}
// Return the number or null
return Retval;
}
答案 0 :(得分:8)
你能使用Nullable int吗?它将允许设置为可空。见这里:http://www.codeproject.com/Articles/11854/C-2-0-Nullable-Types
答案 1 :(得分:1)
您可以使用可空的int(更多信息here)。
可空类型可以表示基础类型的所有值,以及 额外的空值。
public int? ConvertStringToNumber(String TheString)
{
int retval;
bool isInt = Int32.TryParse(TheString, out retval);
return isInt ? retval : null;
}
注意:使用可空类型时,您需要使用强制转换或获取它的值。请参阅here。
示例:强>
int? n = ConvertStringToNumber("123");
int value = n.Value;
// or
int value = (int)n;
答案 2 :(得分:0)
因为Int32.TryParse(TheString, out Retval)
要求int类型不可为空
public int? ConvertStringToNumber(String TheString)
{
// Uninitialized
int Retval;
if (TheString.Length > 0)
{
// We have a valid string
if (Int32.TryParse(TheString, out Retval))
{
// We have a valid Number
return Retval;
}
}
// Return the number or null
return null;
}
答案 3 :(得分:0)
如果您在第一时间为Retval对象分配了值,则该值仅在该区域中有效。 因此,当您返回时,Retval为null。
答案 4 :(得分:-1)
解决问题的简单扩展方法
using System;
namespace temp
{
class Program
{
static void Main(string[] args)
{
string valu = "";
Console.WriteLine(valu.ToInt32());
Console.ReadLine();
}
}
public static class MyExtentions
{
public static int ToInt32(this string s)
{
int x;
if (s != null)
{
if (s.Length > 1)
x = Convert.ToInt32(s);
else
x = 0;
}
else
{
x= 0;
}
return x;
}
}
}
答案 5 :(得分:-2)
int? x = ConvertStringToNumber("1");
int value = x.Value;
c#
中的数字转换字符串