Правильно, узнав от ответчиков, короткий ответ: «Есть ли способ использовать метод расширения в блоке инициализатора объекта в C #?» это " Нет. "
Способ, которым я в конечном итоге решил проблему, с которой столкнулся (похожий, но более сложный, чем проблема с игрушкой, которую я здесь поставил), был гибридным подходом, следующим образом:
Я создал подкласс, например,
public class SubClassedDataObject : BaseDataObject
{
public int Bar
{
get { return (int)GetData("bar"); }
set { SetData("bar", value); }
}
}
Что отлично работает в LINQ, блок инициализации выглядит как
SubClassedDataObject testSub = new SubClassedDataObject
{ SomeValue = 3, SomeOtherValue = 4, Bar = 5 };
Но причина, по которой мне не понравился этот подход в первую очередь, заключается в том, что эти объекты помещаются в XML и возвращаются как BaseDataObject, а обратное преобразование будет раздражением, ненужной копией данных и будет положить две копии одного и того же объекта в игру.
В остальной части кода я игнорировал подклассы и использовал методы расширения:
public static void SetBar(this BaseDataObject dataObject, int barValue)
{
dataObject.SetData("bar", barValue);
}
public static int GetBar(this BaseDataObject dataObject)
{
return (int)dataObject.GetData("bar");
}
И это прекрасно работает.