将String类型数据转化为double类型的时候,你的String类型的变量值为空
解决方法:只需要在转化类型前加一个条件,使得String类型不为空就可以了,s.Length == 0 优于 s == string.Empty 优于 s == ""
扩展资料:
1.string类函数1) =, s.assign() // 赋以新值
2. swap() // 交换两个字符串的内容
3. +=, s.append(), s.push_back() // 在尾部添加字符
4. s.insert() // 插入字符
5. s.erase() // 删除字符
6. s.clear() // 删除全部字符
7. s.replace() // 替换字符
8. + // 串联字符串
9. ==,!=,<,<=,>,>=,compare() // 比较字符串
10.size(),length() // 返回字符数量
11. max_size() // 返回字符的可能最大个数
12.s.empty() // 判断字符串是否为空
13. s.capacity() // 返回重新分配之前的字符容量
14. reserve() // 保留一定量内存以容纳一定数量的字符
出现这种情况,极有可能是你在将String类型数据转化为double类型的时候,你的String类型的变量值为空,此时你只需要在转化类型前加一个条件,使得String类型不为空就好了。
String.Empty是string类的一个静态常量;
String.Empty和string=””区别不大,因为String.Empty的内部实现是:
public static readonly string Empty;
//这就是String.Empty 那是只读的String类的成员,也是string的变量的默认值是什么呢?
//String的构造函数
static String(){
Empty = "";//Empty就是他""
WhitespaceChars = new char[] {
'\t', '\n', '\v', '\f', '\r', ' ', '\x0085', '\x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', '', '\u2028', '\u2029', '', ''
};
}
再看一段代码:
string s1 = "";
string s2 = string.Empty;
if (s1 == s2)
{
Console.WriteLine("一模一样!");
}
// 结果都是True
Console.WriteLine("".Equals(string.Empty));
Console.WriteLine(object.ReferenceEquals(string.Empty, ""));
既然String.Empty和string=””一样,同样需要占用内存空间
string.Empty只是让代码好读,防止代码产生歧义,比如说:
string s = ""; string s = " "; 这个不细心看,很难看出是空字符串还是空格字符。
如果判断一个字符串是否是空串,使用
if(s==String.Empty)和if(s==””)的效率是一样的,但是最高效的写法是if(s.Length==0)
string.IsNullOrEmpty的内部实现方式:
public static bool IsNullOrEmpty(string value)
{
if (value != null)
{
return (value.Length == 0);
}
return true;
}