一个需要返回一些东西的void方法
本文关键字:void 方法 一个 返回 | 更新日期: 2023-09-27 18:17:38
我有一个方法在我的代码必须有一个void返回类型,它必须只接受一个单一的,特定的参数。我需要从中返回一些东西。
给你的细节:我有一个WCF服务上有SQL服务器访问。它的代码由一个名为SQLMetal.exe的程序生成。这给了我一个带有部分方法的部分类(DataContext)。我正在构建这个部分类的另一部分,这些部分功能是像InsertUser或DeleteUser这样的东西。它们没有在部分类的其他部分实现,但我想这意味着我必须实现它们。这很好,但是如果它们是分部方法,它们必须有一个void返回类型。
如果我想从其中一个返回什么呢?我的意思是,一个应用程序可以连接到这个服务,并可以使用它来访问数据库信息。该应用程序将需要知道服务端是否有错误。
所以它是一个带有void返回类型和一组预定义参数的分部方法。
该怎么办?
编辑:更多细节!
首先,为什么我不能更改生成的代码?这是个好建议,但我有点担心。生成它的原因是为了尽量减少未来的编码问题,如果数据库发生变化,你必须重新生成代码。
其次,一些代码:[System.Data.Linq.Mapping.DatabaseAttribute(Name = "HVD01")]
public partial class HydraDataContext : System.Data.Linq.DataContext
{
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
#region Extensibility Method Definitions
partial void OnCreated();
partial void InsertClient(Client instance);
partial void UpdateClient(Client instance);
这就是生成代码的相关部分
那是我的部分。这是在与生成的部分类结合的另一个部分类中。
public void UpdateClient(Client client)
{
//Primary key can't be zero
if (client.ClientID == 0)
return;
dc.Clients.Attach(client, true);
dc.SubmitChanges();
}
显然有潜在的东西需要返回。
异常呢?好吧,如果我在WCF服务上抛出一个,我认为应用程序不会得到它(我可能在这里错了)。应用程序消费服务,但我不认为在服务上抛出异常会到达消费应用程序。会吗?
也许仅仅改变函数是最好的。我只是认为,关键在于尽可能多地保留生成的代码,以防需要重新生成它。
再次感谢。
您不会从void
方法返回任何内容。调用代码的人不会期望你这样做,而且即使你这样做了,他们也不知道该怎么做。
这很好,但是如果它们是部分方法,它们必须有一个void返回类型。
为什么它们是部分方法?如果它们在生成的代码中不存在,那么你可以在你的部分类中定义它们。如果它们确实存在,不要试图改变它们的足迹,否则你会破坏一些东西。
应用程序需要知道服务端是否有错误。
这就是异常的作用。如果有错误,抛出异常
我希望您在这种情况下抛出一个异常来通知客户端出错了:
throw new Exception("I do not believe that parameter means what you think it means");
你可以把你想要返回的参数作为ref。
void DoSomethingOnService(ref object value);
你提到的这些局部方法被设计成允许你钩入LinqSql的内部工作——它们实际上不应该成为你的数据访问层的公共API。您可以在DataContext类中添加任何其他您喜欢的公共方法(没有签名限制)——尽管我建议您查看Repository Pattern。
编辑回复评论
这是一个简单的存储库实现的psuedo示例,它可以作为DataContext的公共包装器,并且可以返回关于您在帖子中描述的操作结果的上下文信息。
public class ClientRepository
{
public ClientRepository()
{
this.DataContext = new HydraDataContext();
}
private HydraDataConetxt DataContext { get; set; }
// DBResult is a made up class which returns some info about the operation...
public DBResult Insert(Client client)
{
try
{
this.DataContext.Clients.InsertOnSubmit(client);
this.DataContext.SubmitChanges();
return DBResult.Success;
}
catch (Exception error)
{
return DBResult.Failed(error.Message);
}
}
}
希望能给你一些启发。
为什么不直接使用类成员呢?
public class Foo
{
string _result;
void DoSomething(string param1)
{
_result = param1;
}
}