Проверьте, определена ли запись с использованием позиционных параметров

#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, а у другого нет параметра ctor

3. @M. Хоориани Я действительно так думаю, проверьте это: sharplab.io/.. … Также со страницы, на которую вы ссылались, » Свойства, которые вы создаете с помощью позиционного синтаксиса, неизменяемы».

4. Вы можете объявить свойства записи с set помощью средств доступа, но ни один код в вашем вопросе этого не делает. Вы не спрашиваете, как отличить свойство с установленным средством доступа от свойства с доступом инициализации, в вашем вопросе задается вопрос о том, как отличить позиционную неизменяемую запись от непозиционной неизменяемой записи, и вы утверждаете, что это связано с тем, что вам нужно проверить неизменяемость. Но обе записи в вашем вопросе неизменны

5. Нет общего способа определить, является ли запись или любой другой тип неизменяемым. Вы можете посмотреть, есть ли в каком-либо из его свойств общедоступные установщики, но это не поможет, если в записи есть метод, который изменяет одно из ее свойств