Как объявить тип записи C#?

я прочитала в блоге что C# 7 будет содержать типы записей

class studentInfo(string StudentFName, string StudentMName, string StudentLName);

однако, когда я попробовал, я получаю эти ошибки

CS0116 пространство имен не может непосредственно содержать такие члены, как поля или методы
CS1022 тип или определение пространства имен, или ожидаемый конец файла
CS1514 { ожидал

как это должно работать?

4 ответов


типы записей (пока) не реализованы в C#. См. предложение в официальном репозитории GitHub:

https://github.com/dotnet/csharplang/blob/master/proposals/records.md

обсудить или проголосовать на https://github.com/dotnet/csharplang/issues/39


типы записей были в дорожной карте для C# 7.0, но в конечном итоге были отложены до более поздней версии языка.

процитировать Мадса Торгерсена в ответ на этот блог,

[первичные конструкторы] все еще на радаре,вместе с соответствующей концепцией типов записей (которую мы рассматривали для C# 7.0), и я надеюсь, что мы сможем приземлиться на лучший дизайн-возможно, тот, который охватывает оба.

As из выпуска C# 7,предложение GitHub для этой языковой функции по-прежнему указывает, что реализация "выполняется."


чтобы добавить к другим ответам, вы можете легко отслеживать, когда новые функции карандашом появляются в C# в эти дни, глядя на язык вех. Есть по крайней мере три v7.X релизы запланированы, но записи теперь запланировано на C# 8. Как и было запланировано для C# 6 и C# 7, обработайте эту цель щепоткой соли...


до C# 7.0 вы объявляете такие классы:

хотя типы записей еще не реализованы в C# 7.0 (как подробно описано в других ответах), вы можете сократите код с помощью авто-свойства только для чтения, представленного в C# 6.0:

public class studentInfo
{
    public string StudentFName { get; }
    public string StudentMName { get; }
    public string StudentLName { get; }

    public studentInfo(string strFN, string strMN, string strLN)
    {
        StudentFName = strFN;
        StudentMName = strMN;
        StudentLName = strLN;
    }
}