TryGetInt32 抛出 System.InvalidOperationException
TryGetInt32 throws System.InvalidOperationException
说我疯了,但我的印象是有一个 try
的约定,这意味着试一试,但如果你不能,请回复我并告诉我它是一个“不行”。
我最近开始了一个新项目,我决定使用 System.Text.Json
而不是 Newtonsoft
,因为它已经推出一段时间了,我喜欢玩新东西。
我在 JsonConverter
中有以下代码:
using (var jsonDoc = JsonDocument.ParseValue(ref reader))
{
if (jsonDoc.RootElement.TryGetInt32(out int number))
{
}
}
当它是一个数字时,它运行得非常好,但是当它不是一个数字时,它就会抛出,就像我在调用 GetInt32()
。
在自定义转换器中,我有时会返回一个数字,但我也可以获得一个对象,其中包含我期望的数字以及一个字符串。我认为我可以使用 TryGetInt32
方法对此进行测试。
我有两个问题:
- 我如何测试我是在取回号码,还是在获取号码和字符串?,
TryGetInt32(out int number)
和GetInt32()
有什么区别?
第一个问题:
使用 int.TryParse(variable,result) :此 return bool 并存储变量(如果结果为整数)
示例:
string json = "5";
int result;
if (int.TryParse(json, out result))
{
Console.WriteLine(result);
}
第二个问题:
TryGetInt32(Int32) :尝试将当前 JSON 数字表示为 Int32 和 return bool 。
Getint32():获取特定值作为 int32 在这种情况下你必须确保该值是整数
如果值不是数字类型,TryGetInt32 将抛出异常。
如果值是数字类型但不是可转换为 int32 的数字类型,则不会抛出 returns false。
希望以下附加检查对您有所帮助:
using (var jsonDoc = JsonDocument.ParseValue(ref reader))
{
if(jsonDoc.RootElement.ValueKind == JsonValueKind.Number &&
jsonDoc.RootElement.TryGetInt32(out int number))
{
}
}
说我疯了,但我的印象是有一个 try
的约定,这意味着试一试,但如果你不能,请回复我并告诉我它是一个“不行”。
我最近开始了一个新项目,我决定使用 System.Text.Json
而不是 Newtonsoft
,因为它已经推出一段时间了,我喜欢玩新东西。
我在 JsonConverter
中有以下代码:
using (var jsonDoc = JsonDocument.ParseValue(ref reader))
{
if (jsonDoc.RootElement.TryGetInt32(out int number))
{
}
}
当它是一个数字时,它运行得非常好,但是当它不是一个数字时,它就会抛出,就像我在调用 GetInt32()
。
在自定义转换器中,我有时会返回一个数字,但我也可以获得一个对象,其中包含我期望的数字以及一个字符串。我认为我可以使用 TryGetInt32
方法对此进行测试。
我有两个问题:
- 我如何测试我是在取回号码,还是在获取号码和字符串?,
TryGetInt32(out int number)
和GetInt32()
有什么区别?
第一个问题: 使用 int.TryParse(variable,result) :此 return bool 并存储变量(如果结果为整数) 示例:
string json = "5";
int result;
if (int.TryParse(json, out result))
{
Console.WriteLine(result);
}
第二个问题: TryGetInt32(Int32) :尝试将当前 JSON 数字表示为 Int32 和 return bool 。 Getint32():获取特定值作为 int32 在这种情况下你必须确保该值是整数
如果值不是数字类型,TryGetInt32 将抛出异常。
如果值是数字类型但不是可转换为 int32 的数字类型,则不会抛出 returns false。
希望以下附加检查对您有所帮助:
using (var jsonDoc = JsonDocument.ParseValue(ref reader))
{
if(jsonDoc.RootElement.ValueKind == JsonValueKind.Number &&
jsonDoc.RootElement.TryGetInt32(out int number))
{
}
}