在c#中使用var真的那么糟糕吗?

时间:2013-07-19 16:34:23

标签: c# coding-style desktop-application

所以我正在为我的同事创建一个连接库,以节省他当前项目的时间。我的同事将在他的c#应用程序中使用此库连接到其他api。在库中,我为每个请求创建了Handler(GET / POST / PUT / DEL)。当他的申请与我的图书馆交谈时,我将返回这样的回复:

return client.PostAsync(url, content).Result;

这将从其余的api返回一个动态对象。

今天他使用了我的图书馆,由于某些原因无法将其与他的应用程序结合使用。我告诉他使用var,它会像这样工作:

var x = API.CreateTraject(parameter1,parameter2);

他拒绝使用var并最终花费了大约40分钟来确定如何在没有它的情况下让它工作。然后他指责我返回一个动态物体,并且他永远不会使用var因为明显更好所以他告诉我。

我正常作为移动开发人员(IOS / Android)工作,我一直使用var。

现在我的问题是:

使用var真的太糟糕了吗?我应该在我的库中转换响应,以便他可以在他的应用程序中明确键入它吗?在我看来,我宁愿使用var并节省一些时间,然后花40分钟尝试去明确。

5 个答案:

答案 0 :(得分:12)

  

使用var真的太糟糕了吗?我应该在我的库中转换响应,以便他可以在他的应用程序中明确键入它吗?在我看来,我宁愿使用var并节省一些时间,然后花40分钟尝试明确。

在C#中,

var仅仅是编译器“技巧”。没有涉及动态类型,编译的代码完全相同。将鼠标悬停在变量上时,IDE将告诉您使用的“真实”类型。

他是否使用var或您的实际回复类型在创建图书馆方面根本不重要。

如果您的图书馆不必要地返回dynamic ,那么这可能是一个不同的问题,并且用户可能会收到有效的投诉。与var(仅仅是编译时技巧)不同,dynamic确实会显着改变行为。

或者,如果您从库中返回匿名类型,您可能需要考虑为您的值创建一个实际的类。匿名类型实际上只是在本地范围内使用,不应该是任何公共API的一部分。

答案 1 :(得分:3)

可以使用var,这不是非法或任何其他内容。

但我想如果您知道变量的类型,请使用类型声明变量。这将使您的代码更易于阅读。

答案 2 :(得分:2)

使用var没有任何违法行为,它只是让编译器弄清楚对象应该是什么数据类型。

唯一的危险是你,程序员,在你将鼠标移开之前不知道它是什么。这可能会导致您认为这是一回事的问题,但事实证明这是其他问题。

答案 3 :(得分:1)

使用implicit typing不是,这只是风格问题。我个人使用它很简单,因为它使我所有的变量声明占用相同的空间量,无论类型如何。

然而,使用dynamic肯定会很糟糕,特别是当它被过度使用时。这意味着可以在编译时执行的类型安全检查需要推迟到运行时。偶尔这有用,但它可能会对性能产生影响。除非您真的需要才能返回动态,否则我强烈建议您从API方法中返回特定类型。

对于它的价值,如果你的同事如此反对隐式打字,他可能只是用这个:

dynamic x = API.CreateTraject(parameter1,parameter2);

答案 4 :(得分:1)

vardynamic无关。 var约为type inference

您的方法不应该以{{1​​}}开头。在任何情况下,创建Generic Methods并让消费者(您的同事)决定该方法将返回的对象类型。