#c# #c#-9.0
Вопрос:
Есть ли какой-либо способ отличить запись, определенную с использованием позиционных параметров, от стандартного синтаксиса свойств, определенного? (Мне нужно проверить его на неизменность)
public record Person1(string FirstName, string LastName);
против
public record Person2
{
public string FirstName { get; set; }
public string LastName { get; set; }
};
и метод был бы таким:
bool DefinedUsingPositionalParameters(Type type) { ... } // Person1: true, Person2: false
Комментарии:
1. Одно предназначено для сокращения другого. Что бы вы ни планировали сделать, различая их, пожалуйста, передумайте и… не делайте этого.
2. Они оба неизменны. Использование основного конструктора создает
get; init;
свойства. Единственное различие заключается в том, что у одного есть 2-arg ctor, а у другого нет параметра ctor3. @M. Хоориани Я действительно так думаю, проверьте это: sharplab.io/.. … Также со страницы, на которую вы ссылались, » Свойства, которые вы создаете с помощью позиционного синтаксиса, неизменяемы».
4. Вы можете объявить свойства записи с
set
помощью средств доступа, но ни один код в вашем вопросе этого не делает. Вы не спрашиваете, как отличить свойство с установленным средством доступа от свойства с доступом инициализации, в вашем вопросе задается вопрос о том, как отличить позиционную неизменяемую запись от непозиционной неизменяемой записи, и вы утверждаете, что это связано с тем, что вам нужно проверить неизменяемость. Но обе записи в вашем вопросе неизменны5. Нет общего способа определить, является ли запись или любой другой тип неизменяемым. Вы можете посмотреть, есть ли в каком-либо из его свойств общедоступные установщики, но это не поможет, если в записи есть метод, который изменяет одно из ее свойств