所以我正在为我的同事创建一个连接库,以节省他当前项目的时间。我的同事将在他的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分钟尝试去明确。
答案 0 :(得分:12)
在C#中,使用var真的太糟糕了吗?我应该在我的库中转换响应,以便他可以在他的应用程序中明确键入它吗?在我看来,我宁愿使用var并节省一些时间,然后花40分钟尝试明确。
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)
var
与dynamic
无关。 var
约为type inference
。
您的方法不应该以{{1}}开头。在任何情况下,创建Generic Methods并让消费者(您的同事)决定该方法将返回的对象类型。