c#中类型推断的目的是什么

时间:2015-10-09 02:41:08

标签: c# type-inference

我没有确切地看到类型推断的目的是什么,将其添加到语言中有什么好处,是否有任何特殊用途,如C ++ 11 auto关键字?

我认为它就像一个添加,因为我不知道真正的情况,结果类型不一定事先知道

(我的意思是使用关键字var)

谢谢

3 个答案:

答案 0 :(得分:2)

在处理复杂签名时,类型推断可以节省难以置信的数量。例如,

var itemCreator = _interface.GetItemCreator();

更紧凑,更易读
Func<int, string, double, decimal, 
    Dictionary<int, KeyValuePair<int, string>>, 
    Action<string, string, string>> itemCreator = _interface.GetItemCreator();

这显然是一个非常人为的例子,旨在证明一点......代码变得混乱,与之相关的类型声明也常常是混乱的。类型推断在这方面为我们带来了一些痛苦。

此外,Type Inference使我们能够使用在LINQ和序列化库中大量使用的匿名方法。

匿名方法在编译时生成一个类型。因此,您无法提前适当地声明类型。

就您与C ++ 11中的自动运算符进行比较而言,乍一看它似乎具有相同/相似的功能。

答案 1 :(得分:1)

public class Class1
{
    public string Method1() 
    {
        return "string";
    }
}

// Calling code
Class1 cls1 = new Class1();
var result = cls1.Method1(); // result is string type.

现在一段时间后,您决定需要从Method1返回 int 。您可以这样做,而无需担心调用代码。

除此之外, var 在LINQ中也被大量使用。

另一个用途是使代码更清晰,例如:

Dictionary<int, string> dictionary = new Dictionary<int, string>();

VS

var dictionary = new Dictionary<int, string>();

你可以看到哪一个更干净。

答案 2 :(得分:1)

类型推断至少有助于C#开发的三个方面:

  1. 编写代码

    var需要更少的击键次数,并且更少时间担心从方法返回的确切类型等。

  2. 了解代码

    与明确指定类型相比,

    var生成更简洁,可读的代码。

  3. 维护代码

    当应用程序中的类型发生变化(并且会发生变化)时,需要更少的代码更改。

  4. var有许多好处和一些缺点。我在任何地方都使用它,除非我有令人信服的理由不这样做。