在之前的组织中,我们实现了一个扩展方法,该方法为String.Format创建了一个简写。该方法称为“String.F”。但是我似乎无法让这个工作。一位前同事给了我以下代码,我将在下面列出我自己的测试方法。在函数'Test()'中,“String.F”抛出并出错,并且不会在intellisence中显示。我会问这是不可能的,但是我已经使用对此方法的调用来编写代码。这只是在使用实例化字符串时才有可能吗?感谢。
public static class MyExtensions {
public static string F(this string target, params object[] args) {
return "hello";
}
}
class TestExtensions {
public string Test() {
return String.F("test:{0}", "test");
}
}
答案 0 :(得分:6)
您无法执行扩展方法并在静态上下文中使用它。扩展方法只能用作实例方法。
你可以做到
public static string F(this string target, params object[] args) {
return String.Format(target, args);
}
并像这样使用
"test:{0}".F("test");
答案 1 :(得分:1)
我认为问题是你在调用String.F时,拥有该方法的类是MyExtensions; not String ...如果你想这样调用它,它应该是MyExtensions.F(“test {0}”,“test”)
正如其他人所提到的那样,尽管这是完全有效的,但它似乎正在回避使扩展方法与众不同的事情。
做“测试{0}”。F(“测试”);应该给出与MyExtensions.F相同的结果(“test {0}”,“test”);如果F未设置为扩展方法,则只有后一种方法才有效。