我想
var form = getForm(); //returns Form type
form.Show();
form.BringToFront();
尽可能让它变得简短。不幸的是,由于Show()
和BringToFront()
没有返回原始的Form对象,因此无法在LINQ中链接表达式。有没有办法解决这个问题,产生如下代码:
getForm().Show().BringToFront()
Extension方法可能适用于Form,但在这种特殊情况下,getForm()
返回Form的子类。
答案 0 :(得分:2)
像这个扩展名的东西可能是:
public static T Do<T>(this T obj, params Action<T>[] actions)
{
foreach(var action in actions)
action(obj);
return obj;
}
...
getForm().Do(f => f.Show()).Do(f => f.BringToFront());
您还可以在不进行链接的情况下执行多项操作:
getForm().Do(f => f.Show(), f => f.BringToFront());
答案 1 :(得分:2)
仅仅因为您的Optional("{\"Success\":\"No Active account found.\"}")
方法返回getForm()
的子类并不意味着您无法创建扩展方法。您只需将其设置为Form
类。这将把它放在项目中Form
类的所有派生中。
Form
答案 2 :(得分:1)
public static class FluentExtensions
{
public static T FluentInvoke<T>(this T o, Action<T> toInvoke)
{
toInvoke(o);
return o;
}
}
然后你就这样使用它(注意Sort
通常不会返回List
):
public class Program
{
static void Main(string[] args)
{
var list = new List<int> {1, 3, 2};
Console.WriteLine(string.Join(",", list.FluentInvoke(o => o.Sort())));
Console.ReadLine();
}
}
或在你的情况下:
getForm().FluentInvoke(z => z.Show()).FluentInvoke(z => z.BringToFront());
答案 3 :(得分:1)
您可以通过将扩展方法设为通用来使扩展方法方法起作用:
T ShowForm<T>(this T form) where T : Form {
form.Show();
return form;
}
现在你可以写
了GetForm().ShowForm().BringToFront();