C# 如何从控制器中的类返回guid

C# 如何从控制器中的类返回guid,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,有没有一种方法可以用下面的代码返回Guid?例如,我要传递给AddSchedule的是一个类。我想从类中返回一个Id,这样我就可以在控制器中使用它。如何更改代码以解决此问题 控制器 ModelService.AddSchedule( new Schedule { Id = Guid.Empty, Start = start, Sto

有没有一种方法可以用下面的代码返回Guid?例如,我要传递给AddSchedule的是一个类。我想从类中返回一个Id,这样我就可以在控制器中使用它。如何更改代码以解决此问题

控制器

ModelService.AddSchedule(
                new Schedule
                {
                 Id = Guid.Empty,
                 Start = start,
                 Stop = end
                });
我想如何处理返回Guid

 ModelService.AddScheduleToPerson(
                new Schedule
                {
                 Id = ?,   // get this from above
                 UserId = userid,
                 User = username
                });
型号

public ObjectCreateStatus AddSchedule(Schedule schedule)
    {
        var client = new Services.ConfigurationClient();
        try
        {
            ConfigurationMessage cMsg =
                client.ConfigService.AddSchedule(
                    this.ControllerBase.SessionVariables.Credentials,
                    schedule
                    );
            if (cMsg.Result == ConfigurationResultEnum.Success)
                return ObjectCreateStatus.Success;                
            return ObjectCreateStatus.GeneralError;
        }
        finally
        {
            client.Close();
        }
    }

如果你想返回一个GUID和一个ObjutCurrestStuple,你可以考虑使用out参数。
 public ObjectCreateStatus AddSchedule(Schedule schedule, out Guid guid) { }

您可以使用
out
参数。我在方法的开头分配GUID,但您可能希望根据需要更改该逻辑。这是您修改过的代码:

public ObjectCreateStatus AddSchedule(Schedule schedule, out Guid theGuid)
    {
        theGuid = Guid.NewGuid();
        var client = new Services.ConfigurationClient();
        try
        {
            ConfigurationMessage cMsg =
                client.ConfigService.AddSchedule(
                    this.ControllerBase.SessionVariables.Credentials,
                    schedule
                    );
            if (cMsg.Result == ConfigurationResultEnum.Success)
                return ObjectCreateStatus.Success;                
            return ObjectCreateStatus.GeneralError;
        }
        finally
        {
            client.Close();
        }
    }

我将创建一个包装器对象,它可以包含
ObjectCreateStatus
Guid
并返回该对象。大概是这样的:

public class ObjectCreateResult
{
    public ObjectCreateStatus CreateStatus { get; set; }
    public Guid CreateGuid { get; set; }
}


public ObjectCreateResult AddSchedule(Schedule schedule)
{
    ObjectCreateResult result = new ObjectCreateResult();

    var client = new Services.ConfigurationClient();
    try
    {
        ConfigurationMessage cMsg =
            client.ConfigService.AddSchedule(
                this.ControllerBase.SessionVariables.Credentials,
                schedule
                );
        if (cMsg.Result == ConfigurationResultEnum.Success)
        {
            result.CreateStatus = ObjectCreateStatus.Success;
            result.CreateGuid = Guid.NewGuid(); // Set your actual Guid here
        }
        else
        {
            result.CreateStatus = ObjectCreateStatus.GeneralError;
            result.CreateGuid = Guid.Empty;
        }

    }
    finally
    {
        client.Close();
    }

    return result;
}

考虑将
ObjectCreateStatus
设置为类:

public class ObjectCreateStatus {
  public bool WasSuccessful { get; private set; }
  public Guid ScheduleId { get; private set; }

  ctor(ConfigurationResultEnum result, Guid guid) {
    WasSuccessful = result == ConfigurationResultEnum.Success;
    ScheduleId = guid
  }
}

public ObjectCreateStatus AddSchedule(Schedule schedule)
{
    var client = new Services.ConfigurationClient();
    try
    {
        ConfigurationMessage cMsg =
            client.ConfigService.AddSchedule(
                this.ControllerBase.SessionVariables.Credentials,
                schedule
                );
        return new ObjectCreateStatus(cMsg.Result, cMsg.Guid(?))
    }
    finally
    {
        client.Close();
    }
}

从何处返回Guid?考虑到您的编辑,如果希望AddSchedule返回Guid,该Guid是在何处生成的?
client.ConfigService.AddSchedule()
返回的ConfigurationMessage是否包含该数据?更改方法的返回类型与更改签名和更新return语句以返回所需的值一样简单<代码>公共Guid AddSchedule(Schedule Schedule){/*…*/return Guid.NewGuid();},但这显然不能解决您的问题。我一般不喜欢使用参数。我觉得这是对代码气味的掩盖。如果您需要从一个函数返回两个不同的值,那么该函数可能做得太多了。不是说永远不要使用它们。但在这种情况下,重构有问题的代码可能是一个更好的选择。这确实取决于具体情况,但我大体上同意
Type.TryParse()
是有效使用out参数的一个很好的例子。@Nathan Tylor和所有人--我在上面指定的是,如何获取返回Guid。。。我的意思是不返回“ObjectCreateStatus”,而是返回“Guid”。