在方法调用之前或之后创建对象吗?

时间:2016-01-08 11:56:26

标签: c#

我有三个不同的数据库需要检查我是否已连接到。这就是我原来的功能,完美无缺。

require(['angular', 'ngResource'], function (angular) {

但是,现在我需要在DTO中记录异常消息以进行每次数据库检查。

public async Task<ServiceAvailabilityDTO> ServiceAvailabilityStatus()
{
    return new ServiceAvailabilityDTO
    {
        IsDb1Online = await IsDb1Available(),
        IsDb2Online = IsDb2Available(),
        IsDb3Online = await IsDb3Available()
    };
}

private async Task<bool> IsDb1Available()
{
    var count = await _db1Service.GetDbCount();
    if (count > 0)
        return true;

    return false;
}

private bool IsDb2Available()
{
    if (_db2Service.GetDbCount() > 0)
        return true;

    return false;
}

private async Task<bool> IsDb3Available()
{
    var pong = await _db3Provider.PingDb();
    if(pong.Success == true && pong.Version != null)
        return true;

    return false;
}

我的问题是;

  1. 我可以保持我的返回方法与第一个示例中的相同,并将对象引用传递给每个方法以存储异常并仍然返回 bool 值。

  2. 或者在所有方法调用都发生之前,是否创建了对象,然后使用返回的值创建对象?

  3.   

    我知道我可以正常创建对象并在每个对象中传递它   方法调用,但具体是这样做的方式   激励我提出这个问题,纯粹是为了通知和学习   从

    感谢。

1 个答案:

答案 0 :(得分:1)

不,你不能这样做,因为在你正在做的事情的上下文中this没有引用你正在填充的对象,它指的是包含你正在调用的方法的对象。

public async Task<ServiceAvailabilityDTO> ServiceAvailabilityStatus()
{
    return new ServiceAvailabilityDTO
    {
        IsDb1Online = await IsDb1Available(),
        IsDb2Online = IsDb2Available(),
        IsDb3Online = await IsDb3Available(this) // here 'this' does NOT ref to ServiceAvailabilityDTO
    };
}

没有 引用ServiceAvailabilityDTO的关键字,因此您只需要创建对象,并将其传递给每个方法。在这一点上,我不认为你返回布尔值有多大意义 - 你也可以在行中设置布尔属性

public async Task<ServiceAvailabilityDTO> ServiceAvailabilityStatus()
{
    var sa = new ServiceAvailabilityDTO();
    await CheckDb1Available(sa);
    CheckDb2Available(sa);
    await CheckDb3Available(sa);
    return sa;
}

(注意我已经将方法从Is*重命名为Check*,因为前者暗示了一个返回布尔值,后者暗示了内联的内容。)