相关疑难解决方法(0)

在C#构造函数中处理损坏的输入数据的最合适方法是什么?

我正在从文件中读取数据并根据此数据创建对象.数据格式不受我的控制,偶尔也会损坏.在C#中构造对象时,最合适的处理这些错误的方法是什么?

在其他编程语言中,我返回了一个null,但这似乎不是C#的一个选项.

我已经设法找出以下选项,但我希望更有经验的C#程序员的建议:

选项1.读取构造函数内的文件,并在源数据损坏时抛出异常:

try
{
    obj = Constructor(sourceFile);
    ... process object ...
}
catch (IOException ex)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

选项2.创建对象,然后使用方法从源文件中读取数据:

obj = Constructor();
obj.ReadData(sourceFile);
if (obj.IsValid)
{
    ... process object ...
}
Run Code Online (Sandbox Code Playgroud)

或者可能在出错时抛出异常:

obj = Constructor();
try
{
    obj.Read(sourceFile);
    ... process object ...
}
catch
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

选项3.使用静态TryParse方法创建对象:

if (ObjClass.TryParse(sourceFile, out obj))
{
    ... process object ...
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,我应该在内部使用选项1实现选项3吗?

public static bool TryParse(FileStream sourceFile, out ObjClass obj)
{   
    try
    {
        obj = Constructor(sourceFile);
        return true; …
Run Code Online (Sandbox Code Playgroud)

c# parsing constructor exception

23
推荐指数
4
解决办法
1047
查看次数

私人会员实例化/初始化的最佳实践是什么?

可能重复:
C#成员变量初始化; 最佳实践?

这有什么好处:

public class RemotingEngine
{
    uint m_currentValueId;
    object m_lock;

    public RemotingEngine()
    {
        m_currentValueId = 0;
        m_lock = new object();
    }
Run Code Online (Sandbox Code Playgroud)

与此:

public class RemotingEngine
{
    uint m_currentValueId = 0;
    object m_lock = new object();
Run Code Online (Sandbox Code Playgroud)

我一直在避开第二个因为它感觉"脏".这显然不那么打字,所以这对我很有吸引力.

.net c#

1
推荐指数
1
解决办法
1163
查看次数

标签 统计

c# ×2

.net ×1

constructor ×1

exception ×1

parsing ×1