C# 基于特定构造函数调用特定方法

C# 基于特定构造函数调用特定方法,c#,wpf,C#,Wpf,我希望使用单个表单保存新记录和更新现有记录 但是有两个构造函数(一个带参数,另一个不带参数)。被调用的构造函数应该确定应该调用哪个方法(保存或更新) 如何实现这一点?我过去解决这一问题的方法是将模型上的主键字段设置为可为空的字段。当您试图保存记录时,只需查看模型上的字段,如果MyPk.HasValue返回true,则您正在更新记录,如果false,则您正在插入新记录 调用获取模型实例的构造函数时,只需将其保存在本地字段中。当调用不带模型的构造函数时,创建一个带有null PK的新模型实例,并将其

我希望使用单个表单保存新记录和更新现有记录 但是有两个构造函数(一个带参数,另一个不带参数)。被调用的构造函数应该确定应该调用哪个方法(保存或更新)


如何实现这一点?

我过去解决这一问题的方法是将模型上的主键字段设置为可为空的
字段。当您试图保存记录时,只需查看模型上的字段,如果
MyPk.HasValue
返回
true
,则您正在更新记录,如果
false
,则您正在插入新记录

调用获取模型实例的构造函数时,只需将其保存在本地字段中。当调用不带模型的构造函数时,创建一个带有null PK的新模型实例,并将其保存在本地字段中<代码>保存
只需检查本地字段即可


因此,最终,您的操作并不是直接基于调用的构造函数,而是基于您当前使用的模型的状态。

您只需在构造函数中设置一个布尔值即可

private readonly bool _isNewEntity;

public ManageRecord()
{
    _isNewEntity = true;
    // Same as existing, _record = new Record() ?
}

public ManageRecord(Record record)
{
    _isNewEntity = false;
    // Same as existing, _record = record ?
}

private void Save_Click(object sender, RoutedEventArgs e)
{
    if (_isNewEntity)
        SaveMethod();
    else
        UpdateMethod(record);
}

你为什么选择让构造器参与其中?我感觉到这里有一个XY问题。你到底想用这个做什么?告诉我们您的根本问题,我们可以帮助您以正确的方式解决。我猜这是在视图模型上。您试图知道是否应该插入新记录,或者根据模型实例是否为新的来更新现有记录。如果这是正确的,请告诉我们。@EdPlunkett如果你能给我一个更好的指导,我会很高兴的method@BradleyUffner我希望使用相同的窗体/窗口完成任一任务。不,它不在视图模型中。我是一个初学者,MVVM目前对我来说工作不太好。注意:您可能想强调这样一个事实:在这种情况下,只有一个方法可以调用(比如
SaveOrUpdate()
),我想检查构造函数传递的记录的id,我只希望有一个预先建立的方法我想检查构造函数传递的记录的id,我只希望有一个预先建立的或更好的方法来实现相同的结果,但没有内置任何内容。你可以像@FrumRoll给出的答案那样设置一个标志,但是我觉得依赖模型的属性是一个更好的方法。模型应该始终存在并保持一致。如果您从构造函数中设置了一个标志,那么如果您添加了另一个构造函数,您必须记住设置它。如果您决定实现依赖注入,它也可能会给您带来问题。
private readonly bool _isNewEntity;

public ManageRecord()
{
    _isNewEntity = true;
    // Same as existing, _record = new Record() ?
}

public ManageRecord(Record record)
{
    _isNewEntity = false;
    // Same as existing, _record = record ?
}

private void Save_Click(object sender, RoutedEventArgs e)
{
    if (_isNewEntity)
        SaveMethod();
    else
        UpdateMethod(record);
}