我在下面的代码中得到一个空引用错误:
string artistName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationArtist);
string albumName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationAlbum);
string songTitle = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationFullName);
foreach (char c in artistName)
{
artistName = artistName.Replace("?", "");
artistName = artistName.Replace("*", "");
artistName = artistName.Replace("/", "");
artistName = artistName.Replace(":", "");
}
foreach (char c in albumName)
{
albumName = albumName.Replace("?", "");
albumName = albumName.Replace("*", "");
albumName = albumName.Replace("/", "");
albumName = albumName.Replace(":", "");
}
我已经从另一个人项目中复制了这个代码,虽然我大部分都知道发生了什么,但我无法弄清楚错误。错误在每个(artistName中的char c)行上。 谢谢你的帮助。
答案 0 :(得分:6)
首先,这段代码开头不好。迭代字符串没有意义 - 但每次都在其中执行相同的替换。
但是,问题的原因只能是artistName
为空 - 当然,其他两个字符串也可能为空。
你可能想要这样的东西:
string artistName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationArtist);
string albumName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationAlbum);
string songTitle = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationFullName);
artistName = RemoveSymbols(artistName);
albumName = RemoveSymbols(albumName);
...
private static string RemoveSymbols(string input)
{
if (input == null)
{
return input;
}
return input.Replace("?", "")
.Replace("*", "")
.Replace("/", "")
.Replace(":", "");
}
如果找不到任何特定的注释,那么仍然仍然之后有空引用,但它不会引发异常。你只需要弄清楚你想对那些缺失的值做些什么。 (例如,您可能希望使用硬编码的“未知”值,或者可能是空字符串。)
答案 1 :(得分:0)
您可以在删除下面的特殊字符之前添加验证
artistName= RemoveSymbols(artistName);
albumName= RemoveSymbols(albumName);
private static string RemoveSymbols(string input)
{
if(!String.IsNullOrEmpty(input))
return input;
return Regex.Replace(input, "[?*/:]", string.Empty);
}
现在你不会得到Null reference error
但是你需要找到从mov.get_Annotation
方法
答案 2 :(得分:0)
C#
提供了合并运算符??
的优势。尝试使用这样:
string artistName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationArtist);
string albumName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationAlbum);
string songTitle = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationFullName);
artistName = Regex.Replace(artistName ?? "" , @"[\*\:\/\?]" , "");
albumName = Regex.Replace(albumName ?? "" , @"[\*\:\/\?]" , "");
songTitle = Regex.Replace(songTitle ?? "" , @"[\*\:\/\?]" , "");