2010-08-18 2 views
1

Есть ли способ, которым я могу вернуть Guid с кодом ниже? Например, то, что я передаю в AddSchedule, является классом. Я хочу вернуть Id из класса, чтобы я мог что-то с ним в контроллере. Как я могу изменить свой код, чтобы решить эту проблему?как вернуть guid из класса в контроллер

Контроллер

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(); 
     } 
    } 
+3

возвращающие Guid от того, что именно? –

+0

Принимая во внимание ваше редактирование, если вы хотите добавить AddSchedule, чтобы вернуть Guid, где это генерируется Guid? Возвращает ли ConfigurationMessage 'client.ConfigService.AddSchedule()' эти данные? Изменение возвращаемого типа вашего метода так же просто, как изменение подписи и обновление оператора return, чтобы вернуть желаемое значение. 'public Guid AddSchedule (расписание) {/*...*/ return Guid.NewGuid(); } ', но это само по себе, очевидно, не решит вашу проблему. –

ответ

1

Если вы желая вернуть GUID, а также ObjectCreateStatus, вы могли бы рассмотреть возможность использования для него параметра out.

public ObjectCreateStatus AddSchedule(Schedule schedule, out Guid guid) { } 
+0

Я вообще не поклонник параметров. Я чувствую, что это прикрытие запаха кода. Если вам нужно вернуть два несопоставимых значения из функции, которая, вероятно, слишком много работает. Не говоря, никогда не используйте их. Но в этом случае рефакторинг кода, о котором идет речь, может быть лучшим вариантом. –

+0

Это действительно зависит от обстоятельств, но в целом я согласен. 'Type.TryParse()' является хорошим примером допустимого использования параметра out. –

+0

@ Nathan Tylor и Everyone - что я указываю выше, как я могу получить return Guid ... Я имею в виду вместо возвращения ObjectCreateStatus, я хочу вернуть «Guid». – hersh

0

Вы можете использовать параметр 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(); 
     } 
    } 
1

Я бы создать объект-оболочку, которая может содержать как ваш 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; 
} 
0

Рассмотрим сделать 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(); 
    } 
}