Просто сделайте это:
public class ForumPost : TableServiceEntity {
public ForumPost(ForumThread ParentThread, bool IsFirstPost)
: base("partitionkey", IsFirstPost ? "0000000" : "1111111") {
}
}
Примечание: я не знаю, что вы хотите передать как ключ раздела .
ОБНОВЛЕНИЕ: чтобы понять, на что способна эта конструкция, мы можем взглянуть на C # спецификацию .
В грамматике C # мы находим следующие записи:
конструктор-инициализатор:: base (список аргументов opt ): this (список аргументов opt )Аргумент-лист:аргументсписок аргументов, аргументаргумент:выражениессылка на переменнуюиз ссылки на переменную
Это, в свою очередь, распространяется на все виды выражений, которые поддерживает язык (см. Раздел C.2.4 ).Это включает вызовы методов, математические выражения, троичный условный оператор и многие другие.
В разделе 10.11.1 (Инициализаторы конструктора) спецификации мы находим следующее:
область видимости параметров, задаваемых списком формальных параметров объявления конструктора экземпляра, включает инициализатор конструктора этого объявления.Таким образом, инициализатору конструктора разрешен доступ к параметрам конструктора.[...] Инициализатор конструктора экземпляра не может получить доступ к создаваемому экземпляру.Следовательно, это ошибка времени компиляции, чтобы ссылаться на это в выражении аргумента инициализатора конструктора, так же как и ошибка времени компиляции для выражения аргумента, чтобы ссылаться на любой элемент экземпляра через простое имя.
Итак, вы можете рассматривать это как любой вызов метода.У вас есть доступ к аргументам конструктора, но не к создаваемому экземпляру. Это означает, что, если ваша логика включает какие-либо элементы экземпляра создаваемого экземпляра, вам придется изменить класс, чтобы разделить их.
Я думаю, что ответ, который я дал (с условным оператором), является наиболее прямым для вашего примера.Мы также можем перейти к другой крайности и использовать метод фабрики, чтобы получить стратегию для этой логики:
public class ForumPost : TableServiceEntity {
public ForumPost(ForumThread ParentThread, bool IsFirstPost)
: base("partitionkey",
RowKeyStrategyFactory.Create().ResolveRowKey(IsFirstPost)) {
}
}
Здесь вы видите статический вызов метода фабрики, который возвращает экземпляр стратегии, а затемвызовом экземпляра виртуального метода стратегии, который запускает желаемую логику.Конкретный класс стратегии будет определяться на основе, например, конфигурации, и будет содержать логику для генерации правильного ключа строки с учетом его параметра.
Как видите, единственного ответа на вопрос нет, только выможет решить на основе вашего дизайна и ограничений.Но, понимая, с чем может справиться конструкция, вы будете лучше осведомлены, чтобы принять правильное решение.