Как я могу использовать атрибуты для свойства, определенного в другой половине частичного класса?

У меня есть автоматически сгенерированный класс для импорта веб-службы, содержащей что-то вроде этого (сокращенно):

<code>[System.Runtime.Serialization.DataMemberAttribute()]
public System.DateTime StartDate 
{
    get 
    {
        return this.StartDateField;
    }
    set { /* implementation prop changed */ }
}
</code>

И я хочу добавить атрибут формата MVC к этому члену. Так что в другом файле, содержащем тот жеpartial class определение, я хотел бы сделать что-то вроде следующего (что является незаконным):

<code>[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
public DateTime StartDate;
</code>

Частичный метод здесь бесполезен, потому что частичные методы должны быть закрытыми, иметь возвращаемый тип void, должны быть методом и т. Д. И т. Д.

Как я могу украсить этот член?

 M.Babcock16 апр. 2012 г., 15:01
Предполагается, что второй фрагмент кода определяетStartDateField используетсяStartDate собственность в вашем первом фрагменте?
 M.Babcock16 апр. 2012 г., 15:03
Вместо того, чтобы использовать частичные классы для украшения вашего сгенерированного кода, вы должны использоватьMetadataType атрибут с другим классом, который отражает сгенерированный класс. (Related Question)
 M.Babcock16 апр. 2012 г., 15:04
Правильный. Вот что касается моего второго комментария.
 Abel16 апр. 2012 г., 15:03
@ M.Babcock: нет, второй фрагмент находится в частичном классе с тем же именем, что и первый. Обычно таким способом добавляются расширения к автоматически сгенерированным классам, но обычно вы только добавляете свойства / методы, но не переопределяете их (на самом деле, вы не можете).
 elia0715 июл. 2014 г., 14:07
проверить это это, я уже ответил на этот вопрос здесьstackoverflow.com/a/24757520/3050647

Ответы на вопрос(1)

Решение Вопроса

Вы могли бы использоватьMetadataType атрибут, как это:

[MetadataType(typeof(MyClass_Validation))]     
public partial class MyClass
{} 

public class MyClass_Validation     
{     
   [DisplayFormat(...)] 
   public DateTime StartDate { get; set; } 
}
 16 апр. 2012 г., 16:46
@Abel - Да, это было специально разработано для этого случая. И матч идет по Имени, а не по подписи.
 Abel16 апр. 2012 г., 15:10
Вы хотите сказать, что использование MetadataType заставляет компилятор добавлять атрибуты похожих сигнатур к соответствующим сигнатурам в частичном классе? Звучит круто, если это работает.
 16 апр. 2012 г., 15:12
Да использоватьMetadataType атрибут для определения типа, который будет содержать атрибуты для автоматически сгенерированного класса, например. Хорошей практикой также является указание атрибутов проверки в другом классе.
 Abel16 апр. 2012 г., 18:39
Работает как шарм. Спасибо за обновление @Henk, я буду осторожен с перегрузками. Не удалось найти ничего подобного в TCPL, хотя там указаны некоторые специальные атрибуты.

Ваш ответ на вопрос