不完全确定如何为这个问题命名,所以我希望这个标题有效。
问题是,我可以在方法调用中使用类似于隐式类型语法的东西吗?例如,这是我所指的隐式类型语法:
var x = new Y(){Foo = "Bar", Id = 1};
我想做这样的事情:
var x = myInstance.CreateItem(){Foo = "Bar", Id = 1};
C# 中有什么东西支持这样的东西吗?我不想这样做:
x.Foo = "Bar";
x.Id = 1;
...
请注意 CreateItem 返回一个动态类型。无法修改 CreateItem 方法及其类。
我会接受类似于 VB 中的 With 语句的东西。
提前致谢。
更新:尝试 Mark Brackett 的解决方案产生了以下代码:
TaskItem item = outlook.CreateItem(OlItemType.olTaskItem)._((Action<dynamic>)(i =>
{
i.Subject = "New Task";
i.StartDate = DateTime.Now;
i.DueDate = DateTime.Now.AddDays(1);
i.ReminderSet = false;
i.Categories = "@Work";
i.Sensitivity = OlSensitivity.olPrivate;
i.Display = true;
}));
...
public static class Extension
{
public static T _<T>(this T o, System.Action<dynamic> initialize) where T : class
{
initialize(o);
return o;
}
}
现在唯一的问题是扩展方法似乎没有绑定到 System._ ComObject 因为我得到这个错误:System. _ComObject' 不包含 '_' 的定义。