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