gpt4 book ai didi

c# - “并非所有代码路径都返回值”使用 'try and catch' block

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:42 25 4
gpt4 key购买 nike

我有以下接口(interface):

//define a method to create a Stream from a generic source
interface IStream
{
Stream GetStream();
}

//define a method to deserialize an object from a stream
interface IDeserializer<T>
{
T GetObject();
}

以及实现它们的以下两个类:

//create a new Stream from a URL source
class UrlReader : IStream
{
private String url;

public UrlReader(String u)
{ url = u; }

public Stream GetStream()
{
using (var client = new WebClient())
{
Stream stream = client.OpenRead(url);
return stream;
}
}
}

//deserialize a JSON object implementing the interface IDeserializer
class JsonDeserializer<T> : IDeserializer<T>
{
private String json;

public JsonDeserializer(String j)
{ json = j; }

public T GetObject()
{
return JsonConvert.DeserializeObject<T>(json);
}
}

我想将 try 和 catch block 添加到这两种方法中以管理异常,但是如果我这样做,并非所有代码路径都会返回一个值。我知道解决此问题的一种方法是在 try block 之前对变量进行 decalre 和初始化以返回。但是我不能初始化 Stream 类型的变量,因为这是一个抽象类,我不能初始化泛型 T 的变量。你能告诉我如何解决这个问题吗?

最佳答案

你要么需要找到一个 Stream 的具体实现,例如 MemoryStream,创建一个实例并返回它

返回 null 在这种情况下其他人可能会遇到 NullReferenceException

尽管异常(exception)。

考虑一下,返回一个空的流是否是个好主意。有人会尝试从中读取并遇到其他问题。

异常并不是一个坏主意,因为它将做什么的决定留给了函数的用户。

关于c# - “并非所有代码路径都返回值”使用 'try and catch' block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32681857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com