我应该公开可空或HasFoo字段吗?

Sam*_*uel 4 c#

我正在从XML格式中读取一些数据并将其放入我的类中,我只是想知道关于可以为空的字段的最佳实践是什么,如果它们是空的,则具有默认值.未提供的值不需要写回文件.

我考虑使用可空类型,但是,在指定默认值的代码中最好的方法是什么(尽管我不需要每个字段的默认值,因为并非所有字段都具有指定的默认值或默认值为0)

目前我正在使用这个:

class SomeElement
{
    public const int DefaultFoo = 123;

    public int? Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但不知道以下是否更明显:

class SomeElement
{
    // Setting HasFoo to false will set Foo to the default value
    public bool HasFoo { get; set; }
    // Setting Foo to anything will set HasFoo to true
    public int Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

由于某些类具有许多属性,因此第二个选项将在类中创建更多方法,但是,如果您不关心Foo是否具有值,则可能更容易使用.

最后的替代方法可能是使用基类中的静态方法或扩展方法来使默认更容易获得(基于此的想法)

// In some method using the class
int value = SomeElementBase.GetValueOrDefault(() => myObj.Foo);
// or an extension method
int value = myObj.GetValueOrDefault(x => x.Foo);
Run Code Online (Sandbox Code Playgroud)

我仍然提供DefaultFoo字段,但静态/扩展方法可能更容易访问?

你的想法是什么?以前有人遇到过这个问题吗?我应该只使用默认值吗?当保存回文件时省略等于其默认值的字段?

hei*_*erg 8

我认为可以使用可空字段.没有多余的代码让它们在你的文件中保持同步,意图非常清楚,你可以访问Foo.HasValue,这比我在类上单独的HasValue属性更能表达你的意图.